游戏战绩描述
667
index-副本.html
@@ -1,667 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="95后,全干开发者">
|
||||
<meta name="keywords" content="Java,Spring,个人博客,微信小程序,博客">
|
||||
<link rel="shortcut icon" href="./favicon.ico">
|
||||
<!-- 百度统计 -->
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?d82271fd27b69793bf97f088c0a87fd4";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- 今日诗词 -->
|
||||
<script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script>
|
||||
<!-- 网站访问计数 -->
|
||||
<script defer src="https://events.vercount.one/js"></script>
|
||||
<script src="./static/js/axios.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
if (!!window.ActiveXObject || "ActiveXObject" in window) { //is IE?
|
||||
alert('朋友,上古浏览器不支持呢~');
|
||||
}
|
||||
</script>
|
||||
<title>白荼 - BAITU</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Georgia', 'Times New Roman', 'STSong', serif;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
/* 信件背景 */
|
||||
/*background: #eeeeee url(./static/img/bj.png);*/
|
||||
/*background-attachment: fixed;*/
|
||||
/*background-repeat: repeat;*/
|
||||
/* 马赛克方格背景 */
|
||||
background-color: #f0f0f0;
|
||||
background-image:
|
||||
linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%),
|
||||
linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%);
|
||||
background-size: 20px 20px;
|
||||
background-position: 0 0, 10px 10px;
|
||||
}
|
||||
|
||||
.letter-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
padding: 40px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
border-radius: 2px;
|
||||
margin-bottom: 20px; /* 与底部信息保持距离 */
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 头部导航 */
|
||||
.nav-tabs {
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 15px 20px;
|
||||
cursor: pointer;
|
||||
border-bottom: 3px solid transparent;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.nav-tab:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.nav-tab.active {
|
||||
border-bottom-color: #333;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 内容区域 */
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* 信纸纹理效果 */
|
||||
.letter-container {
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
}
|
||||
|
||||
/* 通用内容样式 */
|
||||
.content-section {
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.content-section h2 {
|
||||
margin-bottom: 20px;
|
||||
color: #222;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.content-section h3 {
|
||||
margin: 25px 0 15px 0;
|
||||
color: #444;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.content-section p {
|
||||
margin-bottom: 15px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* 列表样式 */
|
||||
.content-section ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.content-section li {
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.content-section li::before {
|
||||
content: "▹";
|
||||
color: #999;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* 联系方式 */
|
||||
.contact-info {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-label {
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 网站链接 */
|
||||
.website-links a {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.website-links a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 工具和游戏网格 */
|
||||
.tools-grid, .games-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 15px;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.tool-item, .game-item {
|
||||
padding: 15px;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.tool-name, .game-name {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.tool-desc, .game-desc {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* 关于我页面特殊样式 */
|
||||
.about-me-content {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.about-me-content p:first-child {
|
||||
font-size: 18px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.letter-container {
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.nav-tabs {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 10px 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.tools-grid, .games-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.letter-footer {
|
||||
text-align: center;
|
||||
margin-top: 60px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #eee;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 底部版权信息 - 在信纸外部 */
|
||||
#footer-wrap {
|
||||
max-width: 800px;
|
||||
margin: 0 auto 20px auto; /* 添加底部边距 */
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
/* 添加背景和边框,模仿信纸容器样式 */
|
||||
background: white;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
border-radius: 2px;
|
||||
/* 添加信纸纹理背景 */
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
border-top: 1px solid #eee; /* 添加顶部边框与信纸区分 */
|
||||
}
|
||||
|
||||
#footer-wrap a {
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#footer-wrap a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer-wrap img {
|
||||
width: 50px;
|
||||
vertical-align: middle;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* 今日诗词样式 */
|
||||
#jinrishici-sentence {
|
||||
position: absolute;
|
||||
top: 111px;
|
||||
right: 40px;
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
text-align: right;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
/* 网站统计样式 */
|
||||
.webinfo {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 30px;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.webinfo-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
#jinrishici-sentence {
|
||||
position: static;
|
||||
text-align: center;
|
||||
max-width: 100%;
|
||||
margin-bottom: 20px;
|
||||
padding: 10px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.webinfo {
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="letter-container">
|
||||
<!-- 头部导航 -->
|
||||
<div class="nav-tabs">
|
||||
<div class="nav-tab active" data-tab="about">关于我</div>
|
||||
<div class="nav-tab" data-tab="website">我的网站</div>
|
||||
<div class="nav-tab" data-tab="tools">常用工具</div>
|
||||
<div class="nav-tab" data-tab="games">常玩游戏</div>
|
||||
<div class="nav-tab" data-tab="contact">联系我</div>
|
||||
</div>
|
||||
|
||||
<!-- 今日诗词 -->
|
||||
<div id="jinrishici-sentence">正在加载今日诗词...</div>
|
||||
|
||||
<!-- 关于我内容 -->
|
||||
<div class="tab-content active" id="about-content">
|
||||
<div class="content-section about-me-content">
|
||||
<h2>你好</h2>
|
||||
<p>见字如面,展信舒颜。</p>
|
||||
<p>我叫<strong>白荼</strong>,河北衡水人,土生土长的北方汉子,毕业于一所不知名的二本院校。信息管理与信息系统专业。
|
||||
自学java、vue、linux、mysql、python等开发技术和一些软件逆向技术,同时还略懂些PS图片、PR视频、AE特效制作。做过系统,剪过网线,搞过plc耍过单片机,维护修理过服务器,
|
||||
运营过公众号和网站等等。可谓是会,但只会一点点。别人都觉得我是个大佬,其实我就是个小菜鸡。</p>
|
||||
<p>平时的爱好也就是玩玩游戏看看书,刷刷动漫,宅男一个,不爱出门。讨厌重复简单的工作,会想办法偷懒写写自己的顺手的小工具什么的,毕竟懒惰是我的生产力。我也经常混迹于各大网络论坛博客
|
||||
并在各个技术博主下面直呼"大佬666"、"大佬牛牛牛"。自己的博客也在断断续续中更新。主要是记录生活随笔和碰到的技术难题。</p>
|
||||
|
||||
<p>作为一个90后,很庆幸我还对技术有着极大的热情!如果你也对技术有着同样的兴趣,也很希望认识你!一同进步共同成长!</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 我的网站内容 -->
|
||||
<div class="tab-content" id="website-content">
|
||||
<div class="content-section">
|
||||
<h2>我的网站</h2>
|
||||
|
||||
<div class="website-links">
|
||||
<h3>个人博客</h3>
|
||||
<a href="https://www.ittoolman.top/" target="_blank">ittoolman.top - Github托管</a>
|
||||
<a href="https://blog.iletter.top/" target="_blank">blog.iletter.top - typecho用户的最后坚守</a>
|
||||
<h3>在线应用</h3>
|
||||
<a href="https://img.iletter.top/" target="_blank">简单图床 - 存一些在线图片</a>
|
||||
<a href="https://bitwarden.iletter.top/" target="_blank">密码保存 - Bitwarden搭建</a>
|
||||
<a href="http://frp.iletter.top/" target="_blank">FRP穿透 - Frp穿透管理后台</a>
|
||||
<a href="http://openlist.iletter.top/" target="_blank">OpenList - 在线云盘的集合</a>
|
||||
<a href="http://webdav.iletter.top/" target="_blank">WebDav - webdav数据备份</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 联系我内容 -->
|
||||
<div class="tab-content" id="contact-content">
|
||||
<div class="content-section">
|
||||
<h2>联系我</h2>
|
||||
<p>欢迎通过以下方式与我联系:</p>
|
||||
|
||||
<div class="contact-info">
|
||||
<div class="contact-item">
|
||||
<span class="contact-label">邮箱:</span>
|
||||
<span>dellevin99@gmail.com</span>
|
||||
</div>
|
||||
<div class="contact-item">
|
||||
<span class="contact-label">微信:</span>
|
||||
<span>E-Levin_</span>
|
||||
</div>
|
||||
<div class="contact-item">
|
||||
<span class="contact-label">扣扣:</span>
|
||||
<span>1754084631</span>
|
||||
</div>
|
||||
<div class="contact-item">
|
||||
<span class="contact-label">地址:</span>
|
||||
<span>山东省·济南市·市中区</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>社交媒体</h3>
|
||||
<div class="website-links">
|
||||
<a href="https://github.com/dellevin" target="_blank">GitHub</a>
|
||||
<a href="https://weibo.com/u/6094785105" target="_blank">微博</a>
|
||||
<a href="https://www.zhihu.com/people/bing-xue-chen-xi-59" target="_blank">知乎</a>
|
||||
<a href="https://space.bilibili.com/403551212" target="_blank">B站</a>
|
||||
</div>
|
||||
|
||||
<h3>留言</h3>
|
||||
<p>如果你有任何问题或建议,欢迎去<a href="https://blog.iletter.top/" target="_blank">我的博客</a>给我留言!</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 工具内容 -->
|
||||
<div class="tab-content" id="tools-content">
|
||||
<div class="content-section">
|
||||
<h2>我的工具</h2>
|
||||
|
||||
<div class="tools-grid">
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Rolan</div>
|
||||
<div class="tool-desc">应用启动器</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Chrome</div>
|
||||
<div class="tool-desc">确实好用</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">VS Code</div>
|
||||
<div class="tool-desc">代码编辑器,轻量高效</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">IntelliJ IDEA</div>
|
||||
<div class="tool-desc">JAVA代码编辑器</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">PyCharm</div>
|
||||
<div class="tool-desc">python代码编辑器</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Android Studio</div>
|
||||
<div class="tool-desc">安卓软件开发</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">HbuilderX</div>
|
||||
<div class="tool-desc">写小程序真心不错,vue+js很棒!减少了学习压力</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Navicate</div>
|
||||
<div class="tool-desc">链接mysql的神器,sqlyog是谁?真不熟。</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Xshell</div>
|
||||
<div class="tool-desc">链接服务器简单易用配合xftp很好用</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Postman</div>
|
||||
<div class="tool-desc">API测试与调试工具</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">VMware</div>
|
||||
<div class="tool-desc">虚拟机管理</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">PhotoShop</div>
|
||||
<div class="tool-desc">ps图片专用蒙版套索十分好用</div>
|
||||
</div>
|
||||
<!--<div class="tool-item">-->
|
||||
<!-- <div class="tool-name">Blender</div>-->
|
||||
<!-- <div class="tool-desc">正在学习中......</div>-->
|
||||
<!--</div>-->
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Obsidian</div>
|
||||
<div class="tool-desc">知识管理,双链接笔记。本地笔记爱好者的福音。</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Typora</div>
|
||||
<div class="tool-desc">Markdown编辑器,简洁美观。</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Docker</div>
|
||||
<div class="tool-desc">容器化部署,环境一致性</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Premiere Pro</div>
|
||||
<div class="tool-desc">剪辑视频调音做简单的效果,简单易用</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">After Effects</div>
|
||||
<div class="tool-desc">特效制作神器,就是对显卡和cpu比较不友好</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">CheatEngine</div>
|
||||
<div class="tool-desc">风灵月影没出来就用它,亦是内存hook的极佳选择</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">x64dbg</div>
|
||||
<div class="tool-desc">孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">WireGuard</div>
|
||||
<div class="tool-desc">组网神器,前提是自己搭建</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Syncthing</div>
|
||||
<div class="tool-desc">文件同步,超级好用,同步笔记的不错选择。</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">NeatReader</div>
|
||||
<div class="tool-desc">看书软件</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Corel VideoStudio</div>
|
||||
<div class="tool-desc">万恶的苏州思杰马克丁!还我会声会影</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">网易云音乐</div>
|
||||
<div class="tool-desc">每天听,每天用,尊贵的年费vip+版权破解Unblock Netease</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">喜马拉雅听书</div>
|
||||
<div class="tool-desc">每天听,每天用。三体,穷鬼的上下两千年等优秀书籍</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">一本日记</div>
|
||||
<div class="tool-desc">正经人谁写日记啊!</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Ollama</div>
|
||||
<div class="tool-desc">本地部署对话AI</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">AnythingLLM</div>
|
||||
<div class="tool-desc">知识库的极佳选择</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">UVR5</div>
|
||||
<div class="tool-desc">处理音频的神器</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">Remote Desktop Manager</div>
|
||||
<div class="tool-desc">超级强大的远控软件</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">SyncClipboard</div>
|
||||
<div class="tool-desc">剪切板同步,好用,爱用</div>
|
||||
</div>
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">QtScrcpy</div>
|
||||
<div class="tool-desc">局域网控制手机的软件</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 游戏内容 -->
|
||||
<div class="tab-content" id="games-content">
|
||||
<div class="content-section">
|
||||
<h2>我常玩的游戏</h2>
|
||||
|
||||
<div class="games-grid">
|
||||
<div class="game-item" data-src="https://www.iletter.top/gamepage/yongjiewujian">
|
||||
<div class="game-name">《永劫无间》</div>
|
||||
<div class="game-desc">我身无拘,武道无穷</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《我的世界》</div>
|
||||
<div class="game-desc">开放冒险,独属于社恐人精神世界的乌托邦</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《鬼谷八荒》</div>
|
||||
<div class="game-desc">立绘优美,故事丰富,沙盒修仙游戏的上乘之作</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《江城创业记》</div>
|
||||
<div class="game-desc">缝合怪,但是全缝了。战斗、农场、自动化你想要的全都有</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《中国式家长》</div>
|
||||
<div class="game-desc">我承认我做不好一个孩子,也做不好一个家长</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《师傅》</div>
|
||||
<div class="game-desc">我这一拳70年的功力,你挡得住吗!</div>
|
||||
</div>
|
||||
|
||||
<div class="game-item">
|
||||
<div class="game-name">《王者荣耀》</div>
|
||||
<div class="game-desc">买了好多皮肤(已退坑)</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《QQ飞车手游》</div>
|
||||
<div class="game-desc">极致细节,巅峰竞速(已退坑)</div>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<div class="game-name">《龙族幻想》</div>
|
||||
<div class="game-desc">因为龙族入坑的(已退坑)</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="letter-footer">
|
||||
<!--愿你被这个世界温柔以待-->
|
||||
我虽然是个废物,但我仍然选择用自己喜欢的方式度过自己的余生
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 底部版权信息和网站统计 - 在信纸外部 -->
|
||||
<div id="footer-wrap">
|
||||
<div class="webinfo">
|
||||
<div class="webinfo-item">
|
||||
<div class="webinfo-site-uv-name">本站访客数 :</div>
|
||||
<div class="webinfo-site-uv-count" id="vercount_value_site_uv">-</div>
|
||||
</div>
|
||||
<div class="webinfo-item">
|
||||
<div class="webinfo-site-name">本站总访问量 :</div>
|
||||
<div class="webinfo-site-pv-count" id="vercount_value_site_pv">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="copyright" style="margin-top: 15px;"><a href="http://beian.miit.gov.cn" target="_blank">冀ICP备2025122609号</a> ©2020 - 2025 Power BY Del Levin </div>
|
||||
<p style="margin-top: 10px">本站由<a href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral" target="_blank" rel="noopener"><img class="alignnone" alt="又拍云logo" style="width: 50px" src="./static/img/又拍云_logo5.png" ></a>提供CDN加速/云存储服务</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// ==================== 标签切换功能 ====================
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const tabs = document.querySelectorAll('.nav-tab');
|
||||
const contents = document.querySelectorAll('.tab-content');
|
||||
|
||||
tabs.forEach(tab => {
|
||||
tab.addEventListener('click', function() {
|
||||
const tabId = this.getAttribute('data-tab');
|
||||
|
||||
// 移除所有激活状态
|
||||
tabs.forEach(t => t.classList.remove('active'));
|
||||
contents.forEach(c => c.classList.remove('active'));
|
||||
|
||||
// 添加当前激活状态
|
||||
this.classList.add('active');
|
||||
document.getElementById(`${tabId}-content`).classList.add('active');
|
||||
});
|
||||
});
|
||||
|
||||
function collectDeviceInfo() {
|
||||
const params = new URLSearchParams();
|
||||
// 基础信息
|
||||
params.append('origin', window.location.origin);
|
||||
params.append('js', navigator.javaEnabled ? '1' : '0'); // 明确传递1或0
|
||||
params.append('cookie', navigator.cookieEnabled ? '1' : '0'); // 明确传递1或0
|
||||
params.append('sw', screen.width);
|
||||
params.append('sh', screen.height);
|
||||
// 新增信息
|
||||
params.append('plugins', navigator.plugins.length);
|
||||
params.append('memory', navigator.deviceMemory || '');
|
||||
params.append('cpu', navigator.platform || '');
|
||||
|
||||
return params.toString();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
639
index.html
@@ -4,10 +4,17 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="95后,全干开发者">
|
||||
<meta name="keywords" content="Java,Spring,个人博客,微信小程序,博客">
|
||||
<meta name="keywords" content="Java,Spring,个人博客,微信小程序,博客,技术文章,编程,开发者,白荼,Del Levin">
|
||||
<link rel="shortcut icon" href="./favicon.ico">
|
||||
<script type="text/javascript">
|
||||
if (!!window.ActiveXObject || "ActiveXObject" in window) { //is IE?
|
||||
alert('朋友,上古浏览器不支持呢~');
|
||||
}
|
||||
</script>
|
||||
<!-- 今日诗词 -->
|
||||
<!-- <script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script> -->
|
||||
<!-- 百度统计 -->
|
||||
<script>
|
||||
<!-- <script>
|
||||
var _hmt = _hmt || [];
|
||||
(function () {
|
||||
var hm = document.createElement("script");
|
||||
@@ -15,23 +22,20 @@
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
<!-- 多语言 -->
|
||||
<script src="./static/js/translations.js"></script>
|
||||
</script> -->
|
||||
<!-- umami统计 -->
|
||||
<script defer src="https://umami.iletter.top/anyjs"
|
||||
data-website-id="ae6cd64c-5900-49c9-9c22-95cedc24a508"></script>
|
||||
<!-- 今日诗词 -->
|
||||
<script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script>
|
||||
<!-- <script defer src="https://umami.iletter.top/anyjs" data-website-id="ae6cd64c-5900-49c9-9c22-95cedc24a508"></script> -->
|
||||
<!-- 多语言 -->
|
||||
<script src="./static/js/language/zh.js"></script>
|
||||
<script src="./static/js/language/en.js"></script>
|
||||
<script src="./static/js/axios.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
if (!!window.ActiveXObject || "ActiveXObject" in window) { //is IE?
|
||||
alert('朋友,上古浏览器不支持呢~');
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
@import url("./static/css/main.css");
|
||||
@import url("./static/css/memos.css");
|
||||
@import url("./static/css/game_dialog.css");
|
||||
</style>
|
||||
<title data-i18n="page_title">白荼 - BAITU</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="letter-container">
|
||||
<!-- 语言切换按钮 -->
|
||||
@@ -41,63 +45,22 @@
|
||||
|
||||
<!-- 头部导航 -->
|
||||
<div class="nav-tabs">
|
||||
<div class="nav-tab active" data-tab="about"><span data-i18n="nav_about">关于我</span></div>
|
||||
<div class="nav-tab" data-tab="website"><span data-i18n="nav_website">我的网站</span></div>
|
||||
<div class="nav-tab" data-tab="tools"><span data-i18n="nav_tools">常用工具</span></div>
|
||||
<div class="nav-tab" data-tab="games"><span data-i18n="nav_games">常玩游戏</span></div>
|
||||
<div class="nav-tab" data-tab="memos"><span data-i18n="nav_memos">闲言碎语</span></div>
|
||||
<div class="nav-tab" data-tab="contact"><span data-i18n="nav_contact">联系我</span></div>
|
||||
<div class="nav-tab active" data-tab="about"><span data-i18n="nav_about"></span></div>
|
||||
<div class="nav-tab" data-tab="website"><span data-i18n="nav_website"></span></div>
|
||||
<div class="nav-tab" data-tab="tools"><span data-i18n="nav_tools"></span></div>
|
||||
<div class="nav-tab" data-tab="games"><span data-i18n="nav_games"></span></div>
|
||||
<div class="nav-tab" data-tab="memos"><span data-i18n="nav_memos"></span></div>
|
||||
<div class="nav-tab" data-tab="contact"><span data-i18n="nav_contact"></span></div>
|
||||
</div>
|
||||
|
||||
<!-- 今日诗词 -->
|
||||
<div id="jinrishici-sentence">正在加载今日诗词...</div>
|
||||
|
||||
<!-- 关于我内容 -->
|
||||
<div class="tab-content active" id="about-content">
|
||||
|
||||
<div class="content-section about-me-content">
|
||||
<h2 data-i18n="hello"></h2>
|
||||
<p data-i18n="greeting"></p>
|
||||
<p data-i18n="about_me_p1">
|
||||
<strong data-i18n="my_name"></strong>
|
||||
</p>
|
||||
<p data-i18n="about_me_p2">
|
||||
</p>
|
||||
<p data-i18n="about_me_p3"></p>
|
||||
<p data-i18n="about_me_p4"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 我的网站内容 -->
|
||||
<div class="tab-content" id="website-content">
|
||||
<div class="content-section">
|
||||
<h2 data-i18n="my_website_h2">我的网站</h2>
|
||||
|
||||
<div class="website-links">
|
||||
<h3 data-i18n="personal_blog_h3">个人博客</h3>
|
||||
<a href="https://www.ittoolman.top/" target="_blank" data-i18n="personal_blog_link1"
|
||||
data-i18n-attr="href">ittoolman.top - Github托管</a>
|
||||
<a href="https://blog.iletter.top/" target="_blank" data-i18n="personal_blog_link2"
|
||||
data-i18n-attr="href">blog.iletter.top - typecho用户的最后坚守</a>
|
||||
<h3 data-i18n="online_apps_h3">在线应用</h3>
|
||||
<a href="https://img.iletter.top/" target="_blank" data-i18n="online_app_link1"
|
||||
data-i18n-attr="href">简单图床 - 图床工具</a>
|
||||
<a href="https://gitea.iletter.top/" target="_blank" data-i18n="online_app_link2"
|
||||
data-i18n-attr="href">Gitea - 私人git托管仓库</a>
|
||||
<a href="http://openlist.iletter.top/" target="_blank" data-i18n="online_app_link3"
|
||||
data-i18n-attr="href">OpenList - 在线云盘合集</a>
|
||||
<a href="http://beszel.iletter.top/" target="_blank" data-i18n="online_app_link4"
|
||||
data-i18n-attr="href">Beszel - 服务器监控</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 联系我内容 -->
|
||||
<div class="tab-content" id="contact-content">
|
||||
<div class="content-section">
|
||||
<h2 data-i18n="contact_me_h2">联系我</h2>
|
||||
<p data-i18n="contact_intro">欢迎通过以下方式与我联系:</p>
|
||||
|
||||
<h2 data-i18n="contact_me_h2"></h2>
|
||||
<p data-i18n="contact_intro"></p>
|
||||
<div class="contact-info">
|
||||
<div class="contact-item">
|
||||
<span class="contact-label" data-i18n="email_label">邮箱:</span>
|
||||
@@ -136,6 +99,26 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 关于我内容 -->
|
||||
<div class="tab-content active" id="about-content">
|
||||
<div class="content-section about-me-content">
|
||||
<h2 data-i18n="hello"></h2>
|
||||
<p data-i18n="greeting"></p>
|
||||
<p data-i18n="about_me_p1"></p>
|
||||
<p data-i18n="about_me_p2"></p>
|
||||
<p data-i18n="about_me_p3"></p>
|
||||
<p data-i18n="about_me_p4"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 我的网站内容 -->
|
||||
<div class="tab-content" id="website-content">
|
||||
<div class="content-section">
|
||||
<h2 data-i18n="my_website_h2"></h2>
|
||||
<div class="website-links" id="dynamic-website-links"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 工具内容 -->
|
||||
<div class="tab-content" id="tools-content">
|
||||
<div class="content-section">
|
||||
@@ -168,7 +151,7 @@
|
||||
</div>
|
||||
|
||||
<div class="letter-footer">
|
||||
<span data-i18n="footer_text">我虽然是个废物,但我仍然选择用自己喜欢的方式度过自己的余生</span>
|
||||
<span data-i18n="footer_text"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -188,9 +171,12 @@
|
||||
target="_blank">冀ICP备2025122609号</a> ©<span>2024 - 2026</span> <span>Power BY</span> <span>Del Levin </span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// ========== 语言切换逻辑 ==========
|
||||
const translations = {
|
||||
'zh': translationsZH,
|
||||
'en': translationsEN
|
||||
};
|
||||
if (typeof translations === 'undefined') {
|
||||
console.error('Translations file (translations.js) is not loaded!');
|
||||
}
|
||||
@@ -207,7 +193,6 @@
|
||||
|
||||
location.reload();
|
||||
}
|
||||
|
||||
function updatePageContent(lang) {
|
||||
const elements = document.querySelectorAll('[data-i18n]');
|
||||
elements.forEach(element => {
|
||||
@@ -238,527 +223,13 @@
|
||||
document.documentElement.lang = savedLang;
|
||||
switchButton.addEventListener('click', switchLanguage);
|
||||
});
|
||||
|
||||
// ==================== Umami Stats 请求 ====================
|
||||
(async () => {
|
||||
const webid = "ae6cd64c-5900-49c9-9c22-95cedc24a508";
|
||||
const statsEndpoint =
|
||||
"https://umami.iletter.top/api/websites/" + webid + "/stats";
|
||||
const startAt = 1768060800000;
|
||||
const endAt = Date.now(); // 当前时间的时间戳(毫秒)
|
||||
const headers = {
|
||||
Authorization:
|
||||
"Bearer 3VvA8ETw0ahPhzuNNY+Zxi3agtfOBT2vNRbm0GcPqIyUhm7rExuwj8F8IwiQWcn/rOD2G/TnONPCFIvUECQYp6GuZRTnfOojki533vP/skqf0D6puOZDQQk8Y7ssihXnfyRu5naGhIoj1BCAC7S0D0RiYvzpSYF9zvZqvgxETrCbFazZsqUBolyJd8H2iZiM4Xx3VC+GnkZHZFgQfaaYUvm33a7CLM74PyFpPby63UExMjIPiLQRAOR2hs5wl5JAs5CTYUaq+QHCCz+tWgDQ4FPtIgoZoG8Ugnywv/YEEn1Jv9p3t8ge7m8ttThnPiZWw62PYPWQ3LpFh7nxX9jQX/Y/vaaAyacCoIP5J4VpiClA40GMMptZrThzEQjheegCilb9",
|
||||
"Content-Type": "application/json",
|
||||
};
|
||||
const params = new URLSearchParams({
|
||||
startAt: startAt.toString(),
|
||||
endAt: endAt.toString(),
|
||||
});
|
||||
const requestUrl = `${statsEndpoint}?${params}`;
|
||||
|
||||
try {
|
||||
const response = await fetch(requestUrl, {
|
||||
method: "GET",
|
||||
headers: headers,
|
||||
});
|
||||
if (!response.ok) {
|
||||
// 如果响应不是 2xx,抛出错误
|
||||
const errorText = await response.text();
|
||||
throw new Error(
|
||||
`HTTP error! status: ${response.status}, details: ${errorText}`
|
||||
);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
// 浏览量 data.pageviews.value
|
||||
// 访问次数 data.visits.value
|
||||
// 访客 data.visitors.value
|
||||
document.getElementById("site_uv").textContent = JSON.stringify(
|
||||
data.visitors.value
|
||||
);
|
||||
document.getElementById("site_pv").textContent = JSON.stringify(
|
||||
data.pageviews.value
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("获取 Umami Stats 数据时发生错误:", error); // 控制台输出错误信息
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script src="./static/js/anypage.js"></script>
|
||||
<script src="./static/js/game_my.js"></script>
|
||||
<script src="./static/js/tools_my.js"></script>
|
||||
<script src="./static/js/memos.js"></script>
|
||||
<script>
|
||||
// ==================== 标签切换功能 ====================
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const tabs = document.querySelectorAll('.nav-tab');
|
||||
const contents = document.querySelectorAll('.tab-content');
|
||||
tabs.forEach(tab => {
|
||||
tab.addEventListener('click', function () {
|
||||
const tabId = this.getAttribute('data-tab');
|
||||
// 移除所有激活状态
|
||||
tabs.forEach(t => t.classList.remove('active'));
|
||||
contents.forEach(c => c.classList.remove('active'));
|
||||
// 添加当前激活状态
|
||||
this.classList.add('active');
|
||||
document.getElementById(`${tabId}-content`).classList.add('active');
|
||||
});
|
||||
});
|
||||
// 点击我的工具函数
|
||||
const toolsTab = document.querySelector('.nav-tab[data-tab="tools"]');
|
||||
const toolsContent = document.getElementById('tools-content');
|
||||
if (toolsTab && toolsContent) {
|
||||
toolsTab.addEventListener('click', function () {
|
||||
const hasRendered = toolsContent.querySelector('.tool-item') !== null;
|
||||
if (!hasRendered) {
|
||||
renderTools(toolsData);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn("未找到“我的工具”标签或内容区域,将在页面加载时尝试渲染。");
|
||||
renderTools(toolsData);
|
||||
}
|
||||
// 点击常玩游戏函数
|
||||
const gamesTab = document.querySelector('.nav-tab[data-tab="games"]');
|
||||
const gamesContent = document.getElementById('games-content');
|
||||
if (gamesTab && gamesContent) {
|
||||
gamesTab.addEventListener('click', function () {
|
||||
const hasRendered = gamesContent.querySelector('.game-item') !== null;
|
||||
if (!hasRendered) {
|
||||
renderGames(gamesData);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn("未找到“常玩游戏”标签或内容区域。");
|
||||
renderGames(gamesData);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Georgia', 'Times New Roman', 'STSong', serif;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
background-position: 0 0, 10px 10px;
|
||||
/* 信件背景(图片) */
|
||||
background: #eeeeee url(./static/img/bj.png);
|
||||
background-attachment: fixed;
|
||||
background-repeat: repeat;
|
||||
/* 信件背景(马赛克方格) */
|
||||
/*background-color: #f0f0f0;*/
|
||||
/*background-image:*/
|
||||
/* linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%),*/
|
||||
/* linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%);*/
|
||||
/*background-size: 20px 20px;*/
|
||||
}
|
||||
|
||||
.letter-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
padding: 40px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 2px;
|
||||
margin-bottom: 20px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 语言切换按钮样式 */
|
||||
.lang-switch-container {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.lang-switch-container img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
cursor: pointer;
|
||||
opacity: 0.7;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.lang-switch-container img:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
/* 头部导航 */
|
||||
.nav-tabs {
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 15px 20px;
|
||||
cursor: pointer;
|
||||
border-bottom: 3px solid transparent;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.nav-tab:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.nav-tab.active {
|
||||
border-bottom-color: #333;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 内容区域 */
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* 信纸纹理效果 */
|
||||
.letter-container {
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
}
|
||||
|
||||
/* 通用内容样式 */
|
||||
.content-section {
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.content-section h2 {
|
||||
margin-bottom: 20px;
|
||||
color: #222;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.content-section h3 {
|
||||
margin: 25px 0 15px 0;
|
||||
color: #444;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.content-section p {
|
||||
margin-bottom: 15px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* 列表样式 */
|
||||
.content-section ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.content-section li {
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.content-section li::before {
|
||||
content: "▹";
|
||||
color: #999;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* 联系方式 */
|
||||
.contact-info {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-label {
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 网站链接 */
|
||||
.website-links a {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.website-links a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 工具和游戏网格 */
|
||||
.tools-grid,
|
||||
.games-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 15px;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.tool-item,
|
||||
.game-item {
|
||||
padding: 15px;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.tool-name,
|
||||
.game-name {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.tool-desc,
|
||||
.game-desc {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* 关于我页面特殊样式 */
|
||||
.about-me-content {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.about-me-content p:first-child {
|
||||
font-size: 18px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.letter-container {
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.nav-tabs {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 10px 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.tools-grid,
|
||||
.games-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* 移动端调整语言按钮位置 */
|
||||
.lang-switch-container {
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 信纸底部页脚描述 */
|
||||
.letter-footer {
|
||||
text-align: center;
|
||||
margin-top: 60px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #eee;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 底部版权信息 - 在信纸外部 */
|
||||
#footer-wrap {
|
||||
max-width: 800px;
|
||||
margin: 0 auto 20px auto;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
background: white;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 2px;
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
#footer-wrap a {
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#footer-wrap a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer-wrap img {
|
||||
width: 50px;
|
||||
vertical-align: middle;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* 今日诗词样式 */
|
||||
#jinrishici-sentence {
|
||||
position: absolute;
|
||||
top: 111px;
|
||||
right: 40px;
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
text-align: right;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
/* 网站统计样式 */
|
||||
.webinfo {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 30px;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.webinfo-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
#jinrishici-sentence {
|
||||
position: static;
|
||||
text-align: center;
|
||||
max-width: 100%;
|
||||
margin-bottom: 20px;
|
||||
padding: 10px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.webinfo {
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
/* --- 新增的闲言碎语样式 --- */
|
||||
.memos-container {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.memo-item {
|
||||
background-color: #fafafa;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.memo-date {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.memo-content {
|
||||
margin-bottom: 8px;
|
||||
word-break: break-word;
|
||||
/* 防止长单词溢出 */
|
||||
}
|
||||
|
||||
.memo-tags {
|
||||
display: inline-block;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.memo-tag {
|
||||
background-color: #e0e0e0;
|
||||
color: #666;
|
||||
padding: 2px 6px;
|
||||
border-radius: 3px;
|
||||
font-size: 12px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.memo-pagination {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.memo-page-btn {
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.memo-page-btn:hover:not(.disabled) {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.memo-page-btn.active {
|
||||
background-color: #333;
|
||||
color: white;
|
||||
border-color: #333;
|
||||
}
|
||||
|
||||
.memo-page-btn.disabled {
|
||||
color: #ccc;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.memo-loading,
|
||||
.memo-error {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.memo-attachments {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.memo-attachment-item {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.memo-attachment-image {
|
||||
max-width: 100px;
|
||||
max-height: 100px;
|
||||
height: auto;
|
||||
object-fit: cover;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* --- 新增的闲言碎语样式 END --- */
|
||||
</style>
|
||||
<script src="./static/js/my-websites.js"></script>
|
||||
<script src="./static/js/tabchange.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
83
static/css/game_dialog.css
Normal file
@@ -0,0 +1,83 @@
|
||||
/* 悬浮框主体 */
|
||||
.game-detail-tooltip {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
background-color: white;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
width: 300px;
|
||||
display: none;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
/* 悬浮框内容 */
|
||||
.tooltip-content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 悬浮框头部 */
|
||||
.tooltip-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.tooltip-header h4 {
|
||||
margin: 0;
|
||||
font-size: 1.1em;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 悬浮框关闭按钮 */
|
||||
.tooltip-close {
|
||||
font-size: 1.2em;
|
||||
cursor: pointer;
|
||||
color: #aaa;
|
||||
line-height: 1;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.tooltip-close:hover {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 悬浮框正文 */
|
||||
.tooltip-body p {
|
||||
margin: 8px 0;
|
||||
line-height: 1.5;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.tooltip-body strong {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.tooltip-body em {
|
||||
color: #666;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* 悬浮框图片容器 */
|
||||
.tooltip-images {
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
/* 悬浮框图片项 */
|
||||
.tooltip-image-item {
|
||||
max-width: 200px;
|
||||
max-height: 100px;
|
||||
height: auto;
|
||||
object-fit: cover;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
/* --- 游戏详情悬浮框 (Tooltip) 样式 END --- */
|
||||
324
static/css/main.css
Normal file
@@ -0,0 +1,324 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Georgia', 'Times New Roman', 'STSong', serif;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
background-position: 0 0, 10px 10px;
|
||||
/* 信件背景(图片) */
|
||||
background: #eeeeee url(../img/bj.png);
|
||||
background-attachment: fixed;
|
||||
background-repeat: repeat;
|
||||
/* 信件背景(马赛克方格) */
|
||||
/*background-color: #f0f0f0;*/
|
||||
/*background-image:*/
|
||||
/* linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%),*/
|
||||
/* linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%);*/
|
||||
/*background-size: 20px 20px;*/
|
||||
}
|
||||
|
||||
.letter-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
padding: 40px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 2px;
|
||||
margin-bottom: 20px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 语言切换按钮样式 */
|
||||
.lang-switch-container {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.lang-switch-container img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
cursor: pointer;
|
||||
opacity: 0.7;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.lang-switch-container img:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
/* 头部导航 */
|
||||
.nav-tabs {
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 15px 20px;
|
||||
cursor: pointer;
|
||||
border-bottom: 3px solid transparent;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.nav-tab:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.nav-tab.active {
|
||||
border-bottom-color: #333;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 内容区域 */
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* 信纸纹理效果 */
|
||||
.letter-container {
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
}
|
||||
|
||||
/* 通用内容样式 */
|
||||
.content-section {
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.content-section h2 {
|
||||
margin-bottom: 20px;
|
||||
color: #222;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.content-section h3 {
|
||||
margin: 25px 0 15px 0;
|
||||
color: #444;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.content-section p {
|
||||
margin-bottom: 15px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
/* 列表样式 */
|
||||
.content-section ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.content-section li {
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.content-section li::before {
|
||||
content: "▹";
|
||||
color: #999;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* 联系方式 */
|
||||
.contact-info {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-label {
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 网站链接 */
|
||||
.website-links a {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.website-links a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 工具和游戏网格 */
|
||||
.tools-grid,
|
||||
.games-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 15px;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.tool-item,
|
||||
.game-item {
|
||||
padding: 15px;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.tool-name,
|
||||
.game-name {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.tool-desc,
|
||||
.game-desc {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* 关于我页面特殊样式 */
|
||||
.about-me-content {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.about-me-content p:first-child {
|
||||
font-size: 18px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.letter-container {
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.nav-tabs {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
padding: 10px 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.tools-grid,
|
||||
.games-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* 移动端调整语言按钮位置 */
|
||||
.lang-switch-container {
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 信纸底部页脚描述 */
|
||||
.letter-footer {
|
||||
text-align: center;
|
||||
margin-top: 60px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #eee;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 底部版权信息 - 在信纸外部 */
|
||||
#footer-wrap {
|
||||
max-width: 800px;
|
||||
margin: 0 auto 20px auto;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
background: white;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 2px;
|
||||
background-image:
|
||||
linear-gradient(transparent 29px, #f0f0f0 30px);
|
||||
background-size: 100% 30px;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
#footer-wrap a {
|
||||
color: #666;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#footer-wrap a:hover {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer-wrap img {
|
||||
width: 50px;
|
||||
vertical-align: middle;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* 今日诗词样式 */
|
||||
#jinrishici-sentence {
|
||||
position: absolute;
|
||||
top: 111px;
|
||||
right: 40px;
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
text-align: right;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
/* 网站统计样式 */
|
||||
.webinfo {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 30px;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.webinfo-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
#jinrishici-sentence {
|
||||
position: static;
|
||||
text-align: center;
|
||||
max-width: 100%;
|
||||
margin-bottom: 20px;
|
||||
padding: 10px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.webinfo {
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
}
|
||||
96
static/css/memos.css
Normal file
@@ -0,0 +1,96 @@
|
||||
/* --- 闲言碎语样式 --- */
|
||||
.memos-container {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.memo-item {
|
||||
background-color: #fafafa;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.memo-date {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.memo-content {
|
||||
margin-bottom: 8px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.memo-tags {
|
||||
display: inline-block;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.memo-tag {
|
||||
background-color: #e0e0e0;
|
||||
color: #666;
|
||||
padding: 2px 6px;
|
||||
border-radius: 3px;
|
||||
font-size: 12px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.memo-pagination {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.memo-page-btn {
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ddd;
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.memo-page-btn:hover:not(.disabled) {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.memo-page-btn.active {
|
||||
background-color: #333;
|
||||
color: white;
|
||||
border-color: #333;
|
||||
}
|
||||
|
||||
.memo-page-btn.disabled {
|
||||
color: #ccc;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.memo-loading,
|
||||
.memo-error {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.memo-attachments {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.memo-attachment-item {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.memo-attachment-image {
|
||||
max-width: 100px;
|
||||
max-height: 100px;
|
||||
height: auto;
|
||||
object-fit: cover;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
/* --- 新增的闲言碎语样式 END --- */
|
||||
BIN
static/img/game/qqspead/qqspead1.jpg
Normal file
|
After Width: | Height: | Size: 848 KiB |
BIN
static/img/game/qqspead/qqspead2.jpg
Normal file
|
After Width: | Height: | Size: 856 KiB |
BIN
static/img/game/yjwj/yjwj_chuanyun.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
static/img/game/yjwj/yjwj_liebian.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
static/img/game/yjwj/yjwj_xiafeng.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 29 KiB |
39
static/js/anypage.js
Normal file
@@ -0,0 +1,39 @@
|
||||
// ==================== Umami Stats 请求 ====================
|
||||
(async () => {
|
||||
const webid = "ae6cd64c-5900-49c9-9c22-95cedc24a508";
|
||||
const statsEndpoint = "https://umami.iletter.top/api/websites/" + webid + "/stats";
|
||||
const startAt = 1768060800000;
|
||||
const endAt = Date.now(); // 当前时间的时间戳(毫秒)
|
||||
const headers = {
|
||||
Authorization:
|
||||
"Bearer 3VvA8ETw0ahPhzuNNY+Zxi3agtfOBT2vNRbm0GcPqIyUhm7rExuwj8F8IwiQWcn/rOD2G/TnONPCFIvUECQYp6GuZRTnfOojki533vP/skqf0D6puOZDQQk8Y7ssihXnfyRu5naGhIoj1BCAC7S0D0RiYvzpSYF9zvZqvgxETrCbFazZsqUBolyJd8H2iZiM4Xx3VC+GnkZHZFgQfaaYUvm33a7CLM74PyFpPby63UExMjIPiLQRAOR2hs5wl5JAs5CTYUaq+QHCCz+tWgDQ4FPtIgoZoG8Ugnywv/YEEn1Jv9p3t8ge7m8ttThnPiZWw62PYPWQ3LpFh7nxX9jQX/Y/vaaAyacCoIP5J4VpiClA40GMMptZrThzEQjheegCilb9",
|
||||
"Content-Type": "application/json",
|
||||
};
|
||||
const params = new URLSearchParams({
|
||||
startAt: startAt.toString(),
|
||||
endAt: endAt.toString(),
|
||||
});
|
||||
const requestUrl = `${statsEndpoint}?${params}`;
|
||||
|
||||
try {
|
||||
const response = await fetch(requestUrl, {
|
||||
method: "GET",
|
||||
headers: headers,
|
||||
});
|
||||
if (!response.ok) {
|
||||
// 如果响应不是 2xx,抛出错误
|
||||
const errorText = await response.text();
|
||||
throw new Error(
|
||||
`HTTP error! status: ${response.status}, details: ${errorText}`
|
||||
);
|
||||
}
|
||||
const data = await response.json();
|
||||
// 浏览量 data.pageviews.value
|
||||
// 访问次数 data.visits.value
|
||||
// 访客 data.visitors.value
|
||||
document.getElementById("site_uv").textContent = JSON.stringify(data.visitors.value);
|
||||
document.getElementById("site_pv").textContent = JSON.stringify(data.pageviews.value);
|
||||
} catch (error) {
|
||||
console.error("获取 Umami Stats 数据时发生错误:", error); // 控制台输出错误信息
|
||||
}
|
||||
})();
|
||||
@@ -1,46 +1,217 @@
|
||||
// static/js/game_my.js
|
||||
|
||||
// ========== 游戏配置数据 ==========
|
||||
const gamesData = [
|
||||
{ name: '《永劫无间》', desc: '我身无拘,武道无穷' },
|
||||
{ name: '《我的世界》', desc: '这个小盒才是我的永远的家' },
|
||||
{ name: '《鬼谷八荒》', desc: '当互动版的修仙小说看了,很好玩.' },
|
||||
{ name: '《江城创业记》', desc: '缝合怪,但是全缝了。很喜欢的一款游戏' },
|
||||
{ name: '《中国式家长》', desc: '我承认我做不好一个孩子,也做不好一个家长' },
|
||||
{ name: '《王者荣耀》', desc: '买了好多皮肤,和朋友玩才是真快乐(已退坑)' },
|
||||
{ name: '《QQ飞车手游》', desc: '氪了好多,有些后悔了(已退坑)' },
|
||||
{ name: '《龙族幻想》', desc: '因为龙族入坑的,小氪(已退坑)' },
|
||||
{ name: '《洛克王国》', desc: '还记得小时候拿压岁钱偷偷买点卡(已退坑)' },
|
||||
{ name: '《造梦西游》', desc: '造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)' },
|
||||
];
|
||||
const gamesData = [
|
||||
{ id:0, name: "《永劫无间》", desc: "我身无拘,武道无穷" },
|
||||
{ id:1, name: "《我的世界》", desc: "这个小盒才是我的永远的家" },
|
||||
{ id:2, name: "《鬼谷八荒》", desc: "当互动版的修仙小说看了,很好玩." },
|
||||
{ id:3, name: "《江城创业记》", desc: "缝合怪,但是全缝了。很喜欢的一款游戏" },
|
||||
{ id:4, name: "《中国式家长》", desc: "我承认我做不好一个孩子,也做不好一个家长" },
|
||||
{ id:5, name: "《王者荣耀》", desc: "买了好多皮肤,和朋友玩才是真快乐(已退坑)" },
|
||||
{ id:6, name: "《QQ飞车手游》", desc: "氪了好多,有些后悔了,太耗注意力了(已退坑)" },
|
||||
{ id:7, name: "《龙族幻想》", desc: "因为龙族入坑的,江南老贼!(已退坑)" },
|
||||
{ id:8, name: "《洛克王国》", desc: "还记得小时候拿压岁钱偷偷买点卡(已退坑)" },
|
||||
{ id:9, name: "《造梦西游》", desc: "造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)" },
|
||||
];
|
||||
|
||||
// ========== 渲染游戏列表的函数 ==========
|
||||
function renderGames(gamesArray) {
|
||||
const container = document.getElementById('games-container');
|
||||
if (!container) {
|
||||
console.error("未找到游戏容器 #games-container");
|
||||
return;
|
||||
}
|
||||
// ========== 游戏详情数据 ==========
|
||||
const gameDetailData = {
|
||||
0: {
|
||||
id: '游戏ID: 42956400140163',
|
||||
rank: '<strong>历史最高段位:</strong>无相龙王',
|
||||
detailDesc: '我希望能玩一辈子永劫无间!',
|
||||
images: [
|
||||
'./static/img/game/yjwj/yjwj_chuanyun.png',
|
||||
'./static/img/game/yjwj/yjwj_xiafeng.png',
|
||||
'./static/img/game/yjwj/yjwj_liebian.png',
|
||||
]
|
||||
},
|
||||
6: {
|
||||
id: '',
|
||||
rank: '<strong>历史最高段位:</strong>传奇车神',
|
||||
detailDesc: '巅峰竞速!可惜我的天行者被割韭菜了。。。',
|
||||
images: [
|
||||
'./static/img/game/qqspead/qqspead1.jpg',
|
||||
'./static/img/game/qqspead/qqspead2.jpg',
|
||||
]
|
||||
},
|
||||
};
|
||||
|
||||
if (!gamesArray || gamesArray.length === 0) {
|
||||
container.innerHTML = '<div class="memo-error" data-i18n="no_games_data">暂无游戏数据</div>';
|
||||
return;
|
||||
}
|
||||
let currentlyOpenTooltip = null; // 用于跟踪当前打开的tooltip
|
||||
|
||||
const currentLang = localStorage.getItem(LANG_KEY) || 'zh';
|
||||
// ========== 显示/隐藏游戏详情的函数 (Tooltip 版本) ==========
|
||||
function toggleGameDetailTooltip(gameElement, gameIndex) {
|
||||
// 如果点击的是同一个游戏,且tooltip是打开的,则关闭它
|
||||
if (currentlyOpenTooltip && currentlyOpenTooltip.index === gameIndex && currentlyOpenTooltip.element && currentlyOpenTooltip.element.style.display === 'block') {
|
||||
hideTooltip(currentlyOpenTooltip.element);
|
||||
currentlyOpenTooltip = null;
|
||||
return;
|
||||
}
|
||||
|
||||
let html = '';
|
||||
gamesArray.forEach((game,index) => {
|
||||
const nameKey = `game_name_${index}`;
|
||||
const descKey = `game_desc_${index}`;
|
||||
const nameTranslation = translations[currentLang][nameKey] || game.name;
|
||||
const descTranslation = translations[currentLang][descKey] || game.desc;
|
||||
// 如果点击的是另一个游戏,先关闭之前打开的tooltip
|
||||
if (currentlyOpenTooltip) {
|
||||
hideTooltip(currentlyOpenTooltip.element);
|
||||
}
|
||||
|
||||
html += `
|
||||
<div class="game-item">
|
||||
<div class="game-name">${nameTranslation}</div>
|
||||
<div class="game-desc">${descTranslation}</div>
|
||||
const detailId = `game-tooltip-${gameIndex}`;
|
||||
let tooltipDiv = document.getElementById(detailId);
|
||||
|
||||
// 如果tooltip不存在,则创建它
|
||||
if (!tooltipDiv) {
|
||||
const detail = gameDetailData[gameIndex];
|
||||
const currentLang = localStorage.getItem('preferred_language') || 'zh';
|
||||
|
||||
const nameKey = `game_name_${gameIndex}`;
|
||||
const descKey = `game_desc_${gameIndex}`;
|
||||
const gameName = typeof translations !== 'undefined' && translations[currentLang] ? translations[currentLang][nameKey] || gamesData[gameIndex].name : gamesData[gameIndex].name;
|
||||
// const gameDesc = typeof translations !== 'undefined' && translations[currentLang] ? translations[currentLang][descKey] || gamesData[gameIndex].desc : gamesData[gameIndex].desc;
|
||||
// console.log("游戏名称:", gameDesc);
|
||||
let tooltipContentHtml = '';
|
||||
if (detail) {
|
||||
tooltipContentHtml = `
|
||||
<div class="tooltip-content">
|
||||
<div class="tooltip-header">
|
||||
<h4>${gameName}</h4>
|
||||
<span class="tooltip-close">×</span>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
container.innerHTML = html;
|
||||
<div class="tooltip-body">
|
||||
<p><strong>${detail.id}</strong></p>
|
||||
<p> ${detail.rank}</p>
|
||||
<p><em>${detail.detailDesc}</em></p>
|
||||
${detail.images && detail.images.length > 0 ?
|
||||
`<div class="tooltip-images">
|
||||
${detail.images.map(imgSrc => `<img src="${imgSrc}" alt="游戏详情图片" class="tooltip-image-item">`).join('')}
|
||||
</div>`
|
||||
: ''}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
tooltipContentHtml = `
|
||||
<div class="tooltip-content">
|
||||
<div class="tooltip-header">
|
||||
<h4>${gameName}</h4>
|
||||
<span class="tooltip-close">×</span>
|
||||
</div>
|
||||
<div class="tooltip-body">
|
||||
<p style="color: #999; font-style: italic;">博主暂未书写信息~请耐心等待哦!</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
tooltipDiv = document.createElement('div');
|
||||
tooltipDiv.id = detailId;
|
||||
tooltipDiv.className = 'game-detail-tooltip';
|
||||
tooltipDiv.innerHTML = tooltipContentHtml;
|
||||
|
||||
// 添加关闭按钮事件
|
||||
const closeBtn = tooltipDiv.querySelector('.tooltip-close');
|
||||
closeBtn.addEventListener('click', (e) => {
|
||||
e.stopPropagation(); // 防止触发外层的点击关闭
|
||||
hideTooltip(tooltipDiv);
|
||||
currentlyOpenTooltip = null;
|
||||
});
|
||||
|
||||
// 添加点击tooltip外部区域关闭的功能
|
||||
tooltipDiv.addEventListener('click', (e) => {
|
||||
// 只有点击tooltip自身(而非内部内容)才关闭
|
||||
if (e.target === tooltipDiv) {
|
||||
hideTooltip(tooltipDiv);
|
||||
currentlyOpenTooltip = null;
|
||||
}
|
||||
});
|
||||
|
||||
document.body.appendChild(tooltipDiv); // 将tooltip添加到body,实现悬浮效果
|
||||
}
|
||||
|
||||
// 定位tooltip,让它出现在游戏项附近
|
||||
const rect = gameElement.getBoundingClientRect();
|
||||
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
||||
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
||||
|
||||
// 计算tooltip的位置 (例如,出现在游戏项下方)
|
||||
const top = rect.bottom + scrollTop + 10; // 10px 间隙
|
||||
const left = rect.left + scrollLeft; // 与游戏项左侧对齐
|
||||
|
||||
tooltipDiv.style.top = `${top}px`;
|
||||
tooltipDiv.style.left = `${left}px`;
|
||||
tooltipDiv.style.display = 'block';
|
||||
|
||||
// 记录当前打开的tooltip
|
||||
currentlyOpenTooltip = { element: tooltipDiv, index: gameIndex };
|
||||
|
||||
// 阻止事件冒泡到document,避免立即被关闭
|
||||
tooltipDiv.onclick = function(e) {
|
||||
e.stopPropagation();
|
||||
};
|
||||
}
|
||||
|
||||
// ========== 隐藏Tooltip的辅助函数 ==========
|
||||
function hideTooltip(tooltipElement) {
|
||||
if (tooltipElement) {
|
||||
tooltipElement.style.display = 'none';
|
||||
// 如果想完全移除DOM,可以取消下面两行注释,但通常隐藏即可
|
||||
// if (tooltipElement.parentNode) {
|
||||
// tooltipElement.parentNode.removeChild(tooltipElement);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
// ========== 点击文档其他地方关闭Tooltip ==========
|
||||
document.addEventListener('click', function(event) {
|
||||
if (currentlyOpenTooltip && !currentlyOpenTooltip.element.contains(event.target)) {
|
||||
hideTooltip(currentlyOpenTooltip.element);
|
||||
currentlyOpenTooltip = null;
|
||||
}
|
||||
});
|
||||
|
||||
// ========== 渲染游戏列表的函数 ==========
|
||||
function renderGames(gamesArray) {
|
||||
const container = document.getElementById("games-container");
|
||||
if (!container) {
|
||||
console.error("未找到游戏容器 #games-container");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gamesArray || gamesArray.length === 0) {
|
||||
container.innerHTML =
|
||||
'<div class="memo-error" data-i18n="no_games_data">暂无游戏数据</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
const currentLang = localStorage.getItem('preferred_language') || 'zh';
|
||||
|
||||
let html = "";
|
||||
gamesArray.forEach((game, index) => {
|
||||
const nameKey = `game_name_${index}`;
|
||||
const descKey = `game_desc_${index}`;
|
||||
const nameTranslation = typeof translations !== 'undefined' && translations[currentLang] ? translations[currentLang][nameKey] || game.name : game.name;
|
||||
const descTranslation = typeof translations !== 'undefined' && translations[currentLang] ? translations[currentLang][descKey] || game.desc : game.desc;
|
||||
|
||||
// 为每个游戏项添加点击事件,并传递其索引
|
||||
html += `
|
||||
<div class="game-item" data-game-index="${index}">
|
||||
<div class="game-name">${nameTranslation}</div>
|
||||
<div class="game-desc">${descTranslation}</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
container.innerHTML = html;
|
||||
|
||||
// 为每个生成的游戏项添加点击事件监听器
|
||||
const gameItems = container.querySelectorAll('.game-item');
|
||||
gameItems.forEach(item => {
|
||||
item.addEventListener('click', function(event) {
|
||||
event.stopPropagation(); // 阻止点击事件冒泡到document,避免立即关闭
|
||||
const gameIndex = parseInt(this.getAttribute('data-game-index'));
|
||||
toggleGameDetailTooltip(this, gameIndex);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ========== 初始化 ==========
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
renderGames(gamesData);
|
||||
});
|
||||
142
static/js/language/en.js
Normal file
@@ -0,0 +1,142 @@
|
||||
const translationsEN = {
|
||||
'page_title': 'BaiTu - BAITU',
|
||||
'nav_about': 'About Me',
|
||||
'nav_website': 'My Websites',
|
||||
'nav_tools': 'Tools',
|
||||
'nav_games': 'Games',
|
||||
'nav_memos': 'Memos',
|
||||
'nav_contact': 'Contact Me',
|
||||
'hello': 'Hello',
|
||||
'greeting': '',
|
||||
'my_name': 'BaiTu',
|
||||
'about_me_p1': 'My name is <strong>BaiTu</strong>, from Hengshui, Hebei, a native northerner. I graduated from an obscure second-tier university with a major in Information Management and Information Systems. I self-studied development technologies like Java, Vue, Linux, MySQL, Python, and some software reverse engineering techniques. I also have basic skills in PS, PR, and AE. I have experience with systems, networking, PLCs, microcontrollers, server maintenance, and managing public accounts and websites. In short, I know a little bit about many things. Others might think I\'m an expert, but actually, I\'m just a rookie. However, I won\'t give up and will strive to become an expert. As Liu Lian from NARAKA said, "The most important skill in the world is perseverance."',
|
||||
'about_me_p2': 'My hobbies usually involve playing games, reading books, watching anime, and I prefer staying indoors. I hate repetitive and simple work, so I often write small tools to make life easier because laziness drives my productivity. I frequently lurk on various forums and blogs, shouting "666" or "Amazing" under tech bloggers. My own blog updates sporadically, mainly recording daily life notes and technical challenges encountered.',
|
||||
'about_me_p3': 'This site follows a minimalist style, using pure HTML. Umami tracks UV/PV at the bottom. The Memos section uses the Memos API. It also employs Baota Cloud WAF protection and nginx caching for static resources. If you are interested, you can directly download the source code from <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> and use it.',
|
||||
'about_me_p4': 'As a 99er programmer, I am glad to still have great passion for technology after starting work! If you share the same interest in technology, I would love to meet you! Let\'s progress and grow together!',
|
||||
'my_website_h2': 'My Websites',
|
||||
'personal_blog_h3': 'Personal Blogs',
|
||||
'online_apps':'Online Apps',
|
||||
'personal_blog_link1': 'ittoolman.top - Hosted on Github',
|
||||
'personal_blog_link2': 'blog.iletter.top - Last Stand for Typecho Users',
|
||||
'online_apps_h3': 'Online Applications',
|
||||
'online_app_link1': 'EsayImage2 - Image Uploader Tool',
|
||||
'online_app_link2': 'Gitea - Private Git Repository',
|
||||
'online_app_link3': 'OpenList - Online Cloud Disk Collection',
|
||||
'online_app_link4': 'Umami - Website visit analysis',
|
||||
'online_app_link5': 'Beszel - Server Monitoring',
|
||||
'contact_me_h2': 'Contact Me',
|
||||
'contact_intro': 'Feel free to reach out via the following methods:',
|
||||
'email_label': 'Email:',
|
||||
'wechat_label': 'WeChat:',
|
||||
'qq_label': 'QQ:',
|
||||
'address_label': 'Address:',
|
||||
'address_value': 'Shizhong District, Jinan, Shandong Province',
|
||||
'social_media_h3': 'Social Media',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': 'Weibo',
|
||||
'social_link3': 'Zhihu',
|
||||
'social_link4': 'Bilibili',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': 'Leave a Message',
|
||||
'leave_message_p': 'If you have any questions or suggestions, feel free to <a href="https://blog.iletter.top/401.html" target="_blank">click here</a> to leave me a message on my blog!',
|
||||
'leave_message_link': 'click here',
|
||||
'my_tools_h2': 'My Tools',
|
||||
'loading_tools': 'Loading tools list...',
|
||||
'my_games_h2': 'Games I Often Play',
|
||||
'loading_games': 'Loading games list...',
|
||||
'memos_h2': 'Memos',
|
||||
'loading_memos': 'Loading...',
|
||||
'footer_text': 'I still choose to spend the rest of my life in my own way although I am a failure.',
|
||||
'visitor_count_label': 'Visitors:',
|
||||
'visit_count_label': 'Total Visits:',
|
||||
|
||||
// --- 新增: 游戏翻译 (en) ---
|
||||
'game_name_0': 'Naraka',
|
||||
'game_desc_0': 'I am unrestricted, martial arts are boundless',
|
||||
'game_name_1': 'Minecraft',
|
||||
'game_desc_1': 'This little box is my forever home',
|
||||
'game_name_2': 'Gates of Havoc',
|
||||
'game_desc_2': 'Played like an interactive Xianxia novel, quite fun.',
|
||||
'game_name_3': 'Jiangcheng Entrepreneurship Story',
|
||||
'game_desc_3': 'A mashup game, but fully mashed. But a favorite game of mine.',
|
||||
'game_name_4': 'Chinese Parents',
|
||||
'game_desc_4': 'I admit I\'m not good at being a child, nor a parent.',
|
||||
'game_name_5': 'Arena of Valor',
|
||||
'game_desc_5': 'Bought many skins, real joy comes from playing with friends (quit now).',
|
||||
'game_name_6': 'QQ Speed Mobile',
|
||||
'game_desc_6': 'Spent a lot, now a bit regretful (quit now).',
|
||||
'game_name_7': 'Dragon Raja',
|
||||
'game_desc_7': 'Got into it because of the Dragon Raja series, spent a little (quit now).',
|
||||
'game_name_8': 'Roco Kingdom',
|
||||
'game_desc_8': 'Remember secretly buying cards with New Year money as a kid (quit now).',
|
||||
'game_name_9': 'Dream Journey West',
|
||||
'game_desc_9': 'Playing Dream Journey 3 from elementary to college, still enjoy it occasionally (quit now).',
|
||||
|
||||
// --- 新增: 工具翻译 (en) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': 'App launcher, used since college',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': 'Truly useful, but heading towards poop.',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': 'Code editor, lightweight? Efficient!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA Code Editor',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'Python Code Editor',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': 'Android app development, always learning (create new folder).',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': 'Great for writing mini-programs, Vue+JS is awesome! Reduces learning pressure.',
|
||||
'tool_name_7': 'Navicat',
|
||||
'tool_desc_7': 'A神器 for connecting MySQL, what\'s SQLyog? Never heard of it.',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': 'Easy to connect to servers, works well with Xftp.',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API testing and debugging tool',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': 'Virtual machine management, tool toxic? Try this first.',
|
||||
'tool_name_11': 'Photoshop',
|
||||
'tool_desc_11': 'PS image dedicated, masks and lasso are very useful.',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': 'Knowledge management, bidirectional linking notes. A blessing for local note lovers.',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown editor, simple and beautiful.',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': 'Containerized deployment, docker-compose rules them all.',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': 'Video editing, audio adjustment, simple effects, easy to use.',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': 'Special effects creation神器, but not friendly to GPU and CPU.',
|
||||
'tool_name_17': 'Cheat Engine',
|
||||
'tool_desc_17': 'Used it before Feng Ling Yue Ying came out, also a great choice for memory hooks.',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': 'Kid! Want to master reverse power? Start with x64dbg!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': 'Networking神器, screw Sunflower, screw Todesk.',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': 'File sync, super handy, great choice for syncing notes.',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': 'Reading software, a bit regret spending 188 for lifetime.',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': 'Evil Suzhou CorelMark! Give me back Pinnacle Studio.',
|
||||
'tool_name_23': 'Netease Cloud Music',
|
||||
'tool_desc_23': 'Listen and use daily, premium annual VIP + copyright unlock Unblock Netease.',
|
||||
'tool_name_24': 'Ximalaya Audiobook',
|
||||
'tool_desc_24': 'Listen and use daily. Great books like Three Body, Poor Man\'s Past and Future etc.',
|
||||
'tool_name_25': 'A Diary',
|
||||
'tool_desc_25': 'Who writes a diary anyway?!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': 'Local AI deployment, fine-tuning models, 32b is too much for 4070.',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'An excellent choice for AI knowledge base, better than my own fine-tuning + vectorization.',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': 'Audio processing神器, what hardships were separating audio back then!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': 'Super powerful remote control software.',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': 'Clipboard sync, handy, love it. No more copying/pasting via WeChat messages.',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': 'LAN phone control tool, remote adb is awesome.',
|
||||
'tool_name_32': 'RaiDrive',
|
||||
'tool_desc_32': 'Cloud storage mounting, super easy to use',
|
||||
}
|
||||
142
static/js/language/zh.js
Normal file
@@ -0,0 +1,142 @@
|
||||
const translationsZH = {
|
||||
'page_title': '白荼 - BAITU',
|
||||
'nav_about': '关于我',
|
||||
'nav_website': '我的网站',
|
||||
'nav_tools': '常用工具',
|
||||
'nav_games': '常玩游戏',
|
||||
'nav_memos': '闲言碎语',
|
||||
'nav_contact': '联系我',
|
||||
'hello': '你好',
|
||||
'greeting': '见字如面,展信舒颜。',
|
||||
'my_name': '白荼',
|
||||
'about_me_p1': '我叫<strong>白荼</strong>,河北衡水人,土生土长的北方汉子,毕业于一所不知名的二本院校。信息管理与信息系统专业。自学java、vue、linux、mysql、python等开发技术和一些软件逆向技术,同时还略懂些PS图片、PR视频、AE特效制作。做过系统,剪过网线,搞过plc,耍过单片机,维护修理过服务器,运营过公众号和网站等等。可谓是会,但只会一点点。别人都觉得我是个大佬,其实我就是个小菜鸡。但我不会气馁,努力成为一个大佬的。正如永劫无间刘炼的一句话“天下万般之绝学,莫过于恒心。”',
|
||||
'about_me_p2': '平时的爱好也就是玩玩游戏,看看书,刷刷动漫,不爱出门,肥宅一个。讨厌重复简单的工作,会想办法偷懒写写自己的顺手的小工具什么的,毕竟懒惰是我的生产力。我也经常混迹于各大网络论坛博客并在各个技术博主下面直呼"大佬666"、"大佬牛牛牛"。自己的博客也在断断续续中更新。主要是记录生活随笔和碰到的技术难题。',
|
||||
'about_me_p3': '本站秉承简约风格,采用纯HTML,Umami做网站底部的uv/pv ,闲言碎语模块使用memos接口。同时使用堡塔云WAF防护,nginx缓存加速网站静态资源。如果您有兴趣,可以直接下载本站的 <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> 并使用。',
|
||||
'about_me_p4': '作为一个99年的码农,很庆幸我在工作之后还对技术有着极大的热情!如果你也对技术有着同样的兴趣,也很希望认识你!一同进步共同成长!',
|
||||
'my_website_h2': '我的网站',
|
||||
'personal_blog_h3': '个人博客',
|
||||
'online_apps':'在线应用',
|
||||
'personal_blog_link1': 'ittoolman.top - Github托管',
|
||||
'personal_blog_link2': 'blog.iletter.top - typecho用户的最后坚守',
|
||||
'online_apps_h3': '在线应用',
|
||||
'online_app_link1': '简单图床 - 私人图床工具',
|
||||
'online_app_link2': 'Gitea - 私人git托管仓库',
|
||||
'online_app_link3': 'OpenList - 在线云盘合集',
|
||||
'online_app_link4': 'Umami - 网站访问分析',
|
||||
'online_app_link5': 'Beszel - 服务器监控',
|
||||
'contact_me_h2': '联系我',
|
||||
'contact_intro': '欢迎通过以下方式与我联系:',
|
||||
'email_label': '邮箱:',
|
||||
'wechat_label': '微信:',
|
||||
'qq_label': '扣扣:',
|
||||
'address_label': '地址:',
|
||||
'address_value': '山东省·济南市·市中区',
|
||||
'social_media_h3': '社交媒体',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': '微博',
|
||||
'social_link3': '知乎',
|
||||
'social_link4': 'B站',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': '留言',
|
||||
'leave_message_p': '如果你有任何问题或建议,欢迎<a href="https://blog.iletter.top/401.html" target="_blank">点击此链接</a>去我的博客下面给我留言!',
|
||||
'leave_message_link': '点击此链接',
|
||||
'my_tools_h2': '我的工具',
|
||||
'loading_tools': '正在加载工具列表...',
|
||||
'my_games_h2': '我常玩的游戏',
|
||||
'loading_games': '正在加载游戏列表...',
|
||||
'memos_h2': '闲言碎语',
|
||||
'loading_memos': '正在加载...',
|
||||
'footer_text': '我虽然是个废物,但我仍然选择用自己喜欢的方式度过自己的余生',
|
||||
'visitor_count_label': '本站访客数 :',
|
||||
'visit_count_label': '本站总访问量 :',
|
||||
|
||||
// --- 新增: 游戏翻译 (zh) ---
|
||||
'game_name_0': '《永劫无间》',
|
||||
'game_desc_0': '我身无拘,武道无穷',
|
||||
'game_name_1': '《我的世界》',
|
||||
'game_desc_1': '这个小盒才是我的永远的家',
|
||||
'game_name_2': '《鬼谷八荒》',
|
||||
'game_desc_2': '当互动版的修仙小说看了,很好玩.',
|
||||
'game_name_3': '《江城创业记》',
|
||||
'game_desc_3': '缝合怪,但是全缝了。很喜欢的一款游戏',
|
||||
'game_name_4': '《中国式家长》',
|
||||
'game_desc_4': '我承认我做不好一个孩子,也做不好一个家长',
|
||||
'game_name_5': '《王者荣耀》',
|
||||
'game_desc_5': '买了好多皮肤,和朋友玩才是真快乐(已退坑)',
|
||||
'game_name_6': '《QQ飞车手游》',
|
||||
'game_desc_6': '氪了好多,有些后悔了(已退坑)',
|
||||
'game_name_7': '《龙族幻想》',
|
||||
'game_desc_7': '因为龙族入坑的,江南老贼!(已退坑)',
|
||||
'game_name_8': '《洛克王国》',
|
||||
'game_desc_8': '还记得小时候拿压岁钱偷偷买点卡(已退坑)',
|
||||
'game_name_9': '《造梦西游》',
|
||||
'game_desc_9': '造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)',
|
||||
|
||||
// --- 新增: 工具翻译 (zh) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': '应用启动器,从大学用到现在',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': '确实好用,正在向着屎迈进',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': '代码编辑器,轻量?高效!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA代码编辑器',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'python代码编辑器',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': '安卓软件开发,一直在学(新建文件夹)',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': '写小程序真心不错,vue+js很棒!减少了学习压力',
|
||||
'tool_name_7': 'Navicate',
|
||||
'tool_desc_7': '链接mysql的神器,sqlyog是谁?真不熟。',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': '链接服务器简单易用配合xftp很好用',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API测试与调试工具',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': '虚拟机管理,工具有毒?先拿这个试试',
|
||||
'tool_name_11': 'PhotoShop',
|
||||
'tool_desc_11': 'ps图片专用蒙版套索十分好用',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': '知识管理,双链接笔记。本地笔记爱好者的福音。',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown编辑器,简洁美观。',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': '容器化部署,一个docker-compose走天下',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': '剪辑视频调音做简单的效果,简单易用',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': '特效制作神器,就是对显卡和cpu比较不友好',
|
||||
'tool_name_17': 'CheatEngine',
|
||||
'tool_desc_17': '风灵月影没出来就用它,亦是内存hook的极佳选择',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': '孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': '组网神器,去你妹的向日葵,去你妹的todesk',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': '文件同步,超级好用,同步笔记的不错选择。',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': '看书软件,有点后悔花了188买了永久',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': '万恶的苏州思杰马克丁!还我会声会影',
|
||||
'tool_name_23': '网易云音乐',
|
||||
'tool_desc_23': '每天听,每天用,尊贵的年费vip+版权破解Unblock Netease',
|
||||
'tool_name_24': '喜马拉雅听书',
|
||||
'tool_desc_24': '每天听,每天用。三体,穷鬼的上下两千年等优秀书籍',
|
||||
'tool_name_25': '一本日记',
|
||||
'tool_desc_25': '正经人谁写日记啊!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': '本地部署对话AI,微调模型,32b是4070遭不住',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'AI知识库的极佳选择,比我自己微调+向量化好',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': '处理音频的神器,想当年苦逼的分离音频算什么!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': '超级强大的远控软件',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': '剪切板同步,好用,爱用。再也不用微信消息复制粘贴了',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': '局域网控制手机神器,远程adb牛逼',
|
||||
'tool_name_32': 'RaiDrive',
|
||||
'tool_desc_32': '网盘挂载,超级好用',
|
||||
}
|
||||
99
static/js/my-websites.js
Normal file
@@ -0,0 +1,99 @@
|
||||
// 定义网站数据
|
||||
const websitesData = [
|
||||
{
|
||||
category: 'personal_blog_h3', // 分类标识符,对应国际化 key
|
||||
items: [
|
||||
{
|
||||
url: 'https://www.ittoolman.top/',
|
||||
linkTextKey: 'personal_blog_link1'
|
||||
},
|
||||
{
|
||||
url: 'https://blog.iletter.top/',
|
||||
linkTextKey: 'personal_blog_link2'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
category: 'online_apps',
|
||||
items: [
|
||||
{
|
||||
url: 'https://img.iletter.top/',
|
||||
linkTextKey: 'online_app_link1'
|
||||
},
|
||||
{
|
||||
url: 'https://gitea.iletter.top/',
|
||||
linkTextKey: 'online_app_link2'
|
||||
},
|
||||
{
|
||||
url: 'http://openlist.iletter.top/',
|
||||
linkTextKey: 'online_app_link3'
|
||||
},
|
||||
{
|
||||
url: 'http://umami.iletter.top/',
|
||||
linkTextKey: 'online_app_link4'
|
||||
},
|
||||
{
|
||||
url: 'http://beszel.iletter.top/',
|
||||
linkTextKey: 'online_app_link5'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
function renderWebsites(data, translations, lang = 'zh') {
|
||||
const container = document.getElementById('dynamic-website-links');
|
||||
if (!container) {
|
||||
console.error("Container '#dynamic-website-links' not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 清空容器
|
||||
container.innerHTML = '';
|
||||
|
||||
data.forEach(categoryObj => {
|
||||
const catKey = categoryObj.category;
|
||||
const items = categoryObj.items;
|
||||
|
||||
// 创建分类标题
|
||||
const heading = document.createElement('h3');
|
||||
// 使用传入的语言获取翻译文本
|
||||
const translatedHeadingText = translations[lang][catKey];
|
||||
if (translatedHeadingText !== undefined) {
|
||||
heading.textContent = translatedHeadingText;
|
||||
} else {
|
||||
// 如果找不到翻译,则显示 key 或一个默认值
|
||||
console.warn(`Translation key '${catKey}' not found for language '${lang}'`);
|
||||
heading.textContent = catKey; // 或者设置为 "Unknown Category"
|
||||
}
|
||||
container.appendChild(heading);
|
||||
|
||||
// 创建一个 div 来包裹该分类下的所有链接
|
||||
const linksDiv = document.createElement('div');
|
||||
linksDiv.className = 'category-links'; // 可选,方便 CSS 样式化
|
||||
|
||||
items.forEach(item => {
|
||||
const linkElement = document.createElement('a');
|
||||
linkElement.href = item.url;
|
||||
linkElement.target = '_blank';
|
||||
|
||||
// 获取链接的显示文本
|
||||
const linkTextKey = item.linkTextKey;
|
||||
const translatedLinkText = translations[lang][linkTextKey];
|
||||
if (translatedLinkText !== undefined) {
|
||||
linkElement.textContent = translatedLinkText;
|
||||
} else {
|
||||
// 如果找不到翻译,则显示 key 或一个默认值
|
||||
console.warn(`Translation key '${linkTextKey}' not found for language '${lang}'`);
|
||||
linkElement.textContent = item.url; // 或者设置为 "Link"
|
||||
}
|
||||
linksDiv.appendChild(linkElement);
|
||||
|
||||
// 添加一个间隔(例如空格或换行符,取决于你的 CSS 布局)
|
||||
const space = document.createTextNode(' ');
|
||||
linksDiv.appendChild(space);
|
||||
});
|
||||
|
||||
container.appendChild(linksDiv);
|
||||
});
|
||||
}
|
||||
60
static/js/tabchange.js
Normal file
@@ -0,0 +1,60 @@
|
||||
// ==================== 标签切换功能 ====================
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const tabs = document.querySelectorAll('.nav-tab');
|
||||
const contents = document.querySelectorAll('.tab-content');
|
||||
tabs.forEach(tab => {
|
||||
tab.addEventListener('click', function () {
|
||||
const tabId = this.getAttribute('data-tab');
|
||||
// 移除所有激活状态
|
||||
tabs.forEach(t => t.classList.remove('active'));
|
||||
contents.forEach(c => c.classList.remove('active'));
|
||||
// 添加当前激活状态
|
||||
this.classList.add('active');
|
||||
document.getElementById(`${tabId}-content`).classList.add('active');
|
||||
});
|
||||
});
|
||||
|
||||
const websiteTab = document.querySelector('.nav-tab[data-tab="website"]');
|
||||
const websiteContent = document.getElementById('website-content');
|
||||
if (websiteTab && websiteContent) {
|
||||
websiteTab.addEventListener('click', function () {
|
||||
const hasRendered = websiteContent.querySelector('.category-links') !== null;
|
||||
if (!hasRendered) {
|
||||
const savedLang = localStorage.getItem(LANG_KEY) || 'zh';
|
||||
renderWebsites(websitesData, translations, savedLang);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn("未找到“我的网站”标签或内容区域。");
|
||||
}
|
||||
|
||||
// 点击我的工具函数
|
||||
const toolsTab = document.querySelector('.nav-tab[data-tab="tools"]');
|
||||
const toolsContent = document.getElementById('tools-content');
|
||||
if (toolsTab && toolsContent) {
|
||||
toolsTab.addEventListener('click', function () {
|
||||
const hasRendered = toolsContent.querySelector('.tool-item') !== null;
|
||||
if (!hasRendered) {
|
||||
renderTools(toolsData);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn("未找到“我的工具”标签或内容区域,将在页面加载时尝试渲染。");
|
||||
renderTools(toolsData);
|
||||
}
|
||||
// 点击常玩游戏函数
|
||||
const gamesTab = document.querySelector('.nav-tab[data-tab="games"]');
|
||||
const gamesContent = document.getElementById('games-content');
|
||||
if (gamesTab && gamesContent) {
|
||||
gamesTab.addEventListener('click', function () {
|
||||
const hasRendered = gamesContent.querySelector('.game-item') !== null;
|
||||
if (!hasRendered) {
|
||||
renderGames(gamesData);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.warn("未找到“常玩游戏”标签或内容区域。");
|
||||
renderGames(gamesData);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -1,68 +1,78 @@
|
||||
// ========== 工具配置数据 ==========
|
||||
// 将工具数据集中管理
|
||||
const toolsData = [
|
||||
{ name: 'Rolan', desc: '应用启动器,从大学用到现在' },
|
||||
{ name: 'Chrome', desc: '确实好用,正在向着屎迈进' },
|
||||
{ name: 'VS Code', desc: '代码编辑器,轻量?高效!' },
|
||||
{ name: 'IntelliJ IDEA', desc: 'JAVA代码编辑器' },
|
||||
{ name: 'PyCharm', desc: 'python代码编辑器' },
|
||||
{ name: 'Android Studio', desc: '安卓软件开发,一直在学(新建文件夹)' },
|
||||
{ name: 'HbuilderX', desc: '写小程序真心不错,vue+js很棒!减少了学习压力' },
|
||||
{ name: 'Navicate', desc: '链接mysql的神器,sqlyog是谁?真不熟。' },
|
||||
{ name: 'Xshell', desc: '链接服务器简单易用配合xftp很好用' },
|
||||
{ name: 'Postman', desc: 'API测试与调试工具' },
|
||||
{ name: 'VMware', desc: '虚拟机管理,工具有毒?先拿这个试试' },
|
||||
{ name: 'PhotoShop', desc: 'ps图片专用蒙版套索十分好用' },
|
||||
{ name: 'Obsidian', desc: '知识管理,双链接笔记。本地笔记爱好者的福音。' },
|
||||
{ name: 'Typora', desc: 'Markdown编辑器,简洁美观。' },
|
||||
{ name: 'Docker', desc: '容器化部署,一个docker-compose走天下' },
|
||||
{ name: 'Premiere Pro', desc: '剪辑视频调音做简单的效果,简单易用' },
|
||||
{ name: 'After Effects', desc: '特效制作神器,就是对显卡和cpu比较不友好' },
|
||||
{ name: 'CheatEngine', desc: '风灵月影没出来就用它,亦是内存hook的极佳选择' },
|
||||
{ name: 'x64dbg', desc: '孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!' },
|
||||
{ name: 'WireGuard', desc: '组网神器,去你妹的向日葵,去你妹的todesk' },
|
||||
{ name: 'Syncthing', desc: '文件同步,超级好用,同步笔记的不错选择。' },
|
||||
{ name: 'NeatReader', desc: '看书软件,有点后悔花了188买了永久' },
|
||||
{ name: 'Corel VideoStudio', desc: '万恶的苏州思杰马克丁!还我会声会影' },
|
||||
{ name: '网易云音乐', desc: '每天听,每天用,尊贵的年费vip+版权破解Unblock Netease' },
|
||||
{ name: '喜马拉雅听书', desc: '每天听,每天用。三体,穷鬼的上下两千年等优秀书籍' },
|
||||
{ name: '一本日记', desc: '正经人谁写日记啊!' },
|
||||
{ name: 'Ollama', desc: '本地部署对话AI,微调模型,32b是4070遭不住' },
|
||||
{ name: 'AnythingLLM', desc: 'AI知识库的极佳选择,比我自己微调+向量化好' },
|
||||
{ name: 'UVR5', desc: '处理音频的神器,想当年苦逼的分离音频算什么!' },
|
||||
{ name: 'Remote Desktop Manager', desc: '超级强大的远控软件' },
|
||||
{ name: 'SyncClipboard', desc: '剪切板同步,好用,爱用。再也不用微信消息复制粘贴了' },
|
||||
{ name: 'QtScrcpy', desc: '局域网控制手机神器,远程adb牛逼' },
|
||||
];
|
||||
// ========== 工具配置数据 ==========
|
||||
// 将工具数据集中管理
|
||||
const toolsData = [
|
||||
{ name: "Rolan", desc: "应用启动器,从大学用到现在" },
|
||||
{ name: "Chrome", desc: "确实好用,正在向着屎迈进" },
|
||||
{ name: "VS Code", desc: "代码编辑器,轻量?高效!" },
|
||||
{ name: "IntelliJ IDEA", desc: "JAVA代码编辑器" },
|
||||
{ name: "PyCharm", desc: "python代码编辑器" },
|
||||
{ name: "Android Studio", desc: "安卓软件开发,一直在学(新建文件夹)" },
|
||||
{ name: "HbuilderX", desc: "写小程序真心不错,vue+js很棒!减少了学习压力" },
|
||||
{ name: "Navicate", desc: "链接mysql的神器,sqlyog是谁?真不熟。" },
|
||||
{ name: "Xshell", desc: "链接服务器简单易用配合xftp很好用" },
|
||||
{ name: "Postman", desc: "API测试与调试工具" },
|
||||
{ name: "VMware", desc: "虚拟机管理,工具有毒?先拿这个试试" },
|
||||
{ name: "PhotoShop", desc: "ps图片专用蒙版套索十分好用" },
|
||||
{ name: "Obsidian", desc: "知识管理,双链接笔记。本地笔记爱好者的福音。" },
|
||||
{ name: "Typora", desc: "Markdown编辑器,简洁美观。" },
|
||||
{ name: "Docker", desc: "容器化部署,一个docker-compose走天下" },
|
||||
{ name: "Premiere Pro", desc: "剪辑视频调音做简单的效果,简单易用" },
|
||||
{ name: "After Effects", desc: "特效制作神器,就是对显卡和cpu比较不友好" },
|
||||
{ name: "CheatEngine", desc: "风灵月影没出来就用它,亦是内存hook的极佳选择" },
|
||||
{ name: "x64dbg", desc: "孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!" },
|
||||
{ name: "WireGuard", desc: "组网神器,去你妹的向日葵,去你妹的todesk" },
|
||||
{ name: "Syncthing", desc: "文件同步,超级好用,同步笔记的不错选择。" },
|
||||
{ name: "NeatReader", desc: "看书软件,有点后悔花了188买了永久" },
|
||||
{ name: "Corel VideoStudio", desc: "万恶的苏州思杰马克丁!还我会声会影" },
|
||||
{
|
||||
name: "网易云音乐",
|
||||
desc: "每天听,每天用,尊贵的年费vip+版权破解Unblock Netease",
|
||||
},
|
||||
{
|
||||
name: "喜马拉雅听书",
|
||||
desc: "每天听,每天用。三体,穷鬼的上下两千年等优秀书籍",
|
||||
},
|
||||
{ name: "一本日记", desc: "正经人谁写日记啊!" },
|
||||
{ name: "Ollama", desc: "本地部署对话AI,微调模型,32b是4070遭不住" },
|
||||
{ name: "AnythingLLM", desc: "AI知识库的极佳选择,比我自己微调+向量化好" },
|
||||
{ name: "UVR5", desc: "处理音频的神器,想当年苦逼的分离音频算什么!" },
|
||||
{ name: "Remote Desktop Manager", desc: "超级强大的远控软件" },
|
||||
{
|
||||
name: "SyncClipboard",
|
||||
desc: "剪切板同步,好用,爱用。再也不用微信消息复制粘贴了",
|
||||
},
|
||||
{ name: "QtScrcpy", desc: "局域网控制手机神器,远程adb牛逼" },
|
||||
];
|
||||
|
||||
// ========== 渲染工具列表的函数 ==========
|
||||
function renderTools(toolsArray) {
|
||||
const container = document.getElementById('tools-container');
|
||||
if (!container) {
|
||||
console.error("未找到工具容器 #tools-container");
|
||||
return;
|
||||
}
|
||||
// ========== 渲染工具列表的函数 ==========
|
||||
function renderTools(toolsArray) {
|
||||
const container = document.getElementById("tools-container");
|
||||
if (!container) {
|
||||
console.error("未找到工具容器 #tools-container");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!toolsArray || toolsArray.length === 0) {
|
||||
container.innerHTML = '<div class="memo-error" data-i18n="no_tools_data">暂无工具数据</div>'; // 可选:无数据提示
|
||||
return;
|
||||
}
|
||||
const currentLang = localStorage.getItem(LANG_KEY) || 'zh';
|
||||
if (!toolsArray || toolsArray.length === 0) {
|
||||
container.innerHTML =
|
||||
'<div class="memo-error" data-i18n="no_tools_data">暂无工具数据</div>'; // 可选:无数据提示
|
||||
return;
|
||||
}
|
||||
const currentLang = localStorage.getItem(LANG_KEY) || "zh";
|
||||
|
||||
let html = '';
|
||||
toolsArray.forEach((tool,index) => {
|
||||
const nameKey = `tool_name_${index}`;
|
||||
const descKey = `tool_desc_${index}`;
|
||||
const nameTranslation = translations[currentLang][nameKey] || tool.name; // 如果没有翻译,则回退到原始数据
|
||||
const descTranslation = translations[currentLang][descKey] || tool.desc;
|
||||
let html = "";
|
||||
toolsArray.forEach((tool, index) => {
|
||||
const nameKey = `tool_name_${index}`;
|
||||
const descKey = `tool_desc_${index}`;
|
||||
const nameTranslation = translations[currentLang][nameKey] || tool.name; // 如果没有翻译,则回退到原始数据
|
||||
const descTranslation = translations[currentLang][descKey] || tool.desc;
|
||||
|
||||
html += `
|
||||
html += `
|
||||
<div class="tool-item">
|
||||
<div class="tool-name">${nameTranslation}</div>
|
||||
<div class="tool-desc">${descTranslation}</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
});
|
||||
|
||||
container.innerHTML = html;
|
||||
}
|
||||
container.innerHTML = html;
|
||||
}
|
||||
|
||||
@@ -1,278 +0,0 @@
|
||||
const translations = {
|
||||
'zh': { // 中文
|
||||
'page_title': '白荼 - BAITU',
|
||||
'nav_about': '关于我',
|
||||
'nav_website': '我的网站',
|
||||
'nav_tools': '常用工具',
|
||||
'nav_games': '常玩游戏',
|
||||
'nav_memos': '闲言碎语',
|
||||
'nav_contact': '联系我',
|
||||
'hello': '你好',
|
||||
'greeting': '见字如面,展信舒颜。',
|
||||
'my_name': '白荼',
|
||||
'about_me_p1': '我叫<strong>白荼</strong>,河北衡水人,土生土长的北方汉子,毕业于一所不知名的二本院校。信息管理与信息系统专业。自学java、vue、linux、mysql、python等开发技术和一些软件逆向技术,同时还略懂些PS图片、PR视频、AE特效制作。做过系统,剪过网线,搞过plc耍过单片机,维护修理过服务器,运营过公众号和网站等等。可谓是会,但只会一点点。别人都觉得我是个大佬,其实我就是个小菜鸡。但我不会气馁,努力成为一个大佬的。正如永劫无间刘炼的一句话“天下万般之绝学,莫过于恒心。”',
|
||||
'about_me_p2': '平时的爱好也就是玩玩游戏,看看书,刷刷动漫,不爱出门,肥宅一个。讨厌重复简单的工作,会想办法偷懒写写自己的顺手的小工具什么的,毕竟懒惰是我的生产力。我也经常混迹于各大网络论坛博客并在各个技术博主下面直呼"大佬666"、"大佬牛牛牛"。自己的博客也在断断续续中更新。主要是记录生活随笔和碰到的技术难题。',
|
||||
'about_me_p3': '本站秉承简约风格,采用纯HTML,Umami做网站底部的uv/pv ,闲言碎语模块使用memos接口。同时使用堡塔云WAF防护,nginx缓存加速网站静态资源。如果您有兴趣,可以直接下载本站的 <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> 并使用。',
|
||||
'about_me_p4': '作为一个99年的码农,很庆幸我在工作之后还对技术有着极大的热情!如果你也对技术有着同样的兴趣,也很希望认识你!一同进步共同成长!',
|
||||
'my_website_h2': '我的网站',
|
||||
'personal_blog_h3': '个人博客',
|
||||
'personal_blog_link1': 'ittoolman.top - Github托管',
|
||||
'personal_blog_link2': 'blog.iletter.top - typecho用户的最后坚守',
|
||||
'online_apps_h3': '在线应用',
|
||||
'online_app_link1': '简单图床 - 图床工具',
|
||||
'online_app_link2': 'Gitea - 私人git托管仓库',
|
||||
'online_app_link3': 'OpenList - 在线云盘合集',
|
||||
'online_app_link4': 'Beszel - 服务器监控',
|
||||
'contact_me_h2': '联系我',
|
||||
'contact_intro': '欢迎通过以下方式与我联系:',
|
||||
'email_label': '邮箱:',
|
||||
'wechat_label': '微信:',
|
||||
'qq_label': '扣扣:',
|
||||
'address_label': '地址:',
|
||||
'address_value': '山东省·济南市·市中区',
|
||||
'social_media_h3': '社交媒体',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': '微博',
|
||||
'social_link3': '知乎',
|
||||
'social_link4': 'B站',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': '留言',
|
||||
'leave_message_p': '如果你有任何问题或建议,欢迎<a href="https://blog.iletter.top/401.html" target="_blank">点击此链接</a>去我的博客下面给我留言!',
|
||||
'leave_message_link': '点击此链接',
|
||||
'my_tools_h2': '我的工具',
|
||||
'loading_tools': '正在加载工具列表...',
|
||||
'my_games_h2': '我常玩的游戏',
|
||||
'loading_games': '正在加载游戏列表...',
|
||||
'memos_h2': '闲言碎语',
|
||||
'loading_memos': '正在加载...',
|
||||
'footer_text': '我虽然是个废物,但我仍然选择用自己喜欢的方式度过自己的余生',
|
||||
'visitor_count_label': '本站访客数 :',
|
||||
'visit_count_label': '本站总访问量 :',
|
||||
|
||||
// --- 新增: 游戏翻译 (zh) ---
|
||||
'game_name_0': '《永劫无间》',
|
||||
'game_desc_0': '我身无拘,武道无穷',
|
||||
'game_name_1': '《我的世界》',
|
||||
'game_desc_1': '这个小盒才是我的永远的家',
|
||||
'game_name_2': '《鬼谷八荒》',
|
||||
'game_desc_2': '当互动版的修仙小说看了,很好玩.',
|
||||
'game_name_3': '《江城创业记》',
|
||||
'game_desc_3': '缝合怪,但是全缝了。很喜欢的一款游戏',
|
||||
'game_name_4': '《中国式家长》',
|
||||
'game_desc_4': '我承认我做不好一个孩子,也做不好一个家长',
|
||||
'game_name_5': '《王者荣耀》',
|
||||
'game_desc_5': '买了好多皮肤,和朋友玩才是真快乐(已退坑)',
|
||||
'game_name_6': '《QQ飞车手游》',
|
||||
'game_desc_6': '氪了好多,有些后悔了(已退坑)',
|
||||
'game_name_7': '《龙族幻想》',
|
||||
'game_desc_7': '因为龙族入坑的,小氪(已退坑)',
|
||||
'game_name_8': '《洛克王国》',
|
||||
'game_desc_8': '还记得小时候拿压岁钱偷偷买点卡(已退坑)',
|
||||
'game_name_9': '《造梦西游》',
|
||||
'game_desc_9': '造梦3从小学玩到大学,现在还时不时的回味一下(已退坑)',
|
||||
|
||||
// --- 新增: 工具翻译 (zh) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': '应用启动器,从大学用到现在',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': '确实好用,正在向着屎迈进',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': '代码编辑器,轻量?高效!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA代码编辑器',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'python代码编辑器',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': '安卓软件开发,一直在学(新建文件夹)',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': '写小程序真心不错,vue+js很棒!减少了学习压力',
|
||||
'tool_name_7': 'Navicate',
|
||||
'tool_desc_7': '链接mysql的神器,sqlyog是谁?真不熟。',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': '链接服务器简单易用配合xftp很好用',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API测试与调试工具',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': '虚拟机管理,工具有毒?先拿这个试试',
|
||||
'tool_name_11': 'PhotoShop',
|
||||
'tool_desc_11': 'ps图片专用蒙版套索十分好用',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': '知识管理,双链接笔记。本地笔记爱好者的福音。',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown编辑器,简洁美观。',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': '容器化部署,一个docker-compose走天下',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': '剪辑视频调音做简单的效果,简单易用',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': '特效制作神器,就是对显卡和cpu比较不友好',
|
||||
'tool_name_17': 'CheatEngine',
|
||||
'tool_desc_17': '风灵月影没出来就用它,亦是内存hook的极佳选择',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': '孩子!你想掌握逆向之力嘛!先从x64dbg开始吧!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': '组网神器,去你妹的向日葵,去你妹的todesk',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': '文件同步,超级好用,同步笔记的不错选择。',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': '看书软件,有点后悔花了188买了永久',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': '万恶的苏州思杰马克丁!还我会声会影',
|
||||
'tool_name_23': '网易云音乐',
|
||||
'tool_desc_23': '每天听,每天用,尊贵的年费vip+版权破解Unblock Netease',
|
||||
'tool_name_24': '喜马拉雅听书',
|
||||
'tool_desc_24': '每天听,每天用。三体,穷鬼的上下两千年等优秀书籍',
|
||||
'tool_name_25': '一本日记',
|
||||
'tool_desc_25': '正经人谁写日记啊!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': '本地部署对话AI,微调模型,32b是4070遭不住',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'AI知识库的极佳选择,比我自己微调+向量化好',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': '处理音频的神器,想当年苦逼的分离音频算什么!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': '超级强大的远控软件',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': '剪切板同步,好用,爱用。再也不用微信消息复制粘贴了',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': '局域网控制手机神器,远程adb牛逼',
|
||||
},
|
||||
'en': { // 英文
|
||||
'page_title': 'BaiTu - BAITU',
|
||||
'nav_about': 'About Me',
|
||||
'nav_website': 'My Websites',
|
||||
'nav_tools': 'Tools',
|
||||
'nav_games': 'Games',
|
||||
'nav_memos': 'Memos',
|
||||
'nav_contact': 'Contact Me',
|
||||
'hello': 'Hello',
|
||||
'greeting': '',
|
||||
'my_name': 'BaiTu',
|
||||
'about_me_p1': 'My name is <strong>BaiTu</strong>, from Hengshui, Hebei, a native northerner. I graduated from an obscure second-tier university with a major in Information Management and Information Systems. I self-studied development technologies like Java, Vue, Linux, MySQL, Python, and some software reverse engineering techniques. I also have basic skills in PS, PR, and AE. I have experience with systems, networking, PLCs, microcontrollers, server maintenance, and managing public accounts and websites. In short, I know a little bit about many things. Others might think I\'m an expert, but actually, I\'m just a rookie. However, I won\'t give up and will strive to become an expert. As Liu Lian from Yu Jie Wu Jian said, "The most important skill in the world is perseverance."',
|
||||
'about_me_p2': 'My hobbies usually involve playing games, reading books, watching anime, and I prefer staying indoors. I hate repetitive and simple work, so I often write small tools to make life easier because laziness drives my productivity. I frequently lurk on various forums and blogs, shouting "Expert 666" or "Expert Amazing" under tech bloggers. My own blog updates sporadically, mainly recording daily life notes and technical challenges encountered.',
|
||||
'about_me_p3': 'This site follows a minimalist style, using pure HTML. Umami tracks UV/PV at the bottom. The Memos section uses the Memos API. It also employs Baota Cloud WAF protection and nginx caching for static resources. If you are interested, you can directly download the source code from <a href="https://gitea.iletter.top/dellevin/BaiTu-homepage" target="_blank">https://gitea.iletter.top/dellevin/BaiTu-homepage </a> and use it.',
|
||||
'about_me_p4': 'As a 99er programmer, I am glad to still have great passion for technology after starting work! If you share the same interest in technology, I would love to meet you! Let\'s progress and grow together!',
|
||||
'my_website_h2': 'My Websites',
|
||||
'personal_blog_h3': 'Personal Blogs',
|
||||
'personal_blog_link1': 'ittoolman.top - Hosted on Github',
|
||||
'personal_blog_link2': 'blog.iletter.top - Last Stand for Typecho Users',
|
||||
'online_apps_h3': 'Online Applications',
|
||||
'online_app_link1': 'Simple Image Hosting - Image Uploader Tool',
|
||||
'online_app_link2': 'Gitea - Private Git Repository',
|
||||
'online_app_link3': 'OpenList - Online Cloud Disk Collection',
|
||||
'online_app_link4': 'Beszel - Server Monitoring',
|
||||
'contact_me_h2': 'Contact Me',
|
||||
'contact_intro': 'Feel free to reach out via the following methods:',
|
||||
'email_label': 'Email:',
|
||||
'wechat_label': 'WeChat:',
|
||||
'qq_label': 'QQ:',
|
||||
'address_label': 'Address:',
|
||||
'address_value': 'Shizhong District, Jinan, Shandong Province',
|
||||
'social_media_h3': 'Social Media',
|
||||
'social_link1': 'GitHub',
|
||||
'social_link2': 'Weibo',
|
||||
'social_link3': 'Zhihu',
|
||||
'social_link4': 'Bilibili',
|
||||
'social_link5': '52pojie',
|
||||
'leave_message_h3': 'Leave a Message',
|
||||
'leave_message_p': 'If you have any questions or suggestions, feel free to <a href="https://blog.iletter.top/401.html" target="_blank">click here</a> to leave me a message on my blog!',
|
||||
'leave_message_link': 'click here',
|
||||
'my_tools_h2': 'My Tools',
|
||||
'loading_tools': 'Loading tools list...',
|
||||
'my_games_h2': 'Games I Often Play',
|
||||
'loading_games': 'Loading games list...',
|
||||
'memos_h2': 'Memos',
|
||||
'loading_memos': 'Loading...',
|
||||
'footer_text': 'I still choose to spend the rest of my life in my own way although I am a failure.',
|
||||
'visitor_count_label': 'Visitors:',
|
||||
'visit_count_label': 'Total Visits:',
|
||||
|
||||
// --- 新增: 游戏翻译 (en) ---
|
||||
'game_name_0': 'Naraka: Bladepoint',
|
||||
'game_desc_0': 'I am unrestricted, martial arts are boundless',
|
||||
'game_name_1': 'Minecraft',
|
||||
'game_desc_1': 'This little box is my forever home',
|
||||
'game_name_2': 'Gates of Havoc',
|
||||
'game_desc_2': 'Played like an interactive Xianxia novel, quite fun.',
|
||||
'game_name_3': 'Jiangcheng Entrepreneurship Story',
|
||||
'game_desc_3': 'A mashup game, but fully mashed. But a favorite game of mine.',
|
||||
'game_name_4': 'Chinese Parents',
|
||||
'game_desc_4': 'I admit I\'m not good at being a child, nor a parent.',
|
||||
'game_name_5': 'Arena of Valor',
|
||||
'game_desc_5': 'Bought many skins, real joy comes from playing with friends (quit now).',
|
||||
'game_name_6': 'QQ Speed Mobile',
|
||||
'game_desc_6': 'Spent a lot, now a bit regretful (quit now).',
|
||||
'game_name_7': 'Dragon Raja',
|
||||
'game_desc_7': 'Got into it because of the Dragon Raja series, spent a little (quit now).',
|
||||
'game_name_8': 'Roco Kingdom',
|
||||
'game_desc_8': 'Remember secretly buying cards with New Year money as a kid (quit now).',
|
||||
'game_name_9': 'Dream Journey West',
|
||||
'game_desc_9': 'Playing Dream Journey 3 from elementary to college, still enjoy it occasionally (quit now).',
|
||||
|
||||
// --- 新增: 工具翻译 (en) ---
|
||||
'tool_name_0': 'Rolan',
|
||||
'tool_desc_0': 'App launcher, used since college',
|
||||
'tool_name_1': 'Chrome',
|
||||
'tool_desc_1': 'Truly useful, but heading towards poop.',
|
||||
'tool_name_2': 'VS Code',
|
||||
'tool_desc_2': 'Code editor, lightweight? Efficient!',
|
||||
'tool_name_3': 'IntelliJ IDEA',
|
||||
'tool_desc_3': 'JAVA Code Editor',
|
||||
'tool_name_4': 'PyCharm',
|
||||
'tool_desc_4': 'Python Code Editor',
|
||||
'tool_name_5': 'Android Studio',
|
||||
'tool_desc_5': 'Android app development, always learning (create new folder).',
|
||||
'tool_name_6': 'HbuilderX',
|
||||
'tool_desc_6': 'Great for writing mini-programs, Vue+JS is awesome! Reduces learning pressure.',
|
||||
'tool_name_7': 'Navicat',
|
||||
'tool_desc_7': 'A神器 for connecting MySQL, what\'s SQLyog? Never heard of it.',
|
||||
'tool_name_8': 'Xshell',
|
||||
'tool_desc_8': 'Easy to connect to servers, works well with Xftp.',
|
||||
'tool_name_9': 'Postman',
|
||||
'tool_desc_9': 'API testing and debugging tool',
|
||||
'tool_name_10': 'VMware',
|
||||
'tool_desc_10': 'Virtual machine management, tool toxic? Try this first.',
|
||||
'tool_name_11': 'Photoshop',
|
||||
'tool_desc_11': 'PS image dedicated, masks and lasso are very useful.',
|
||||
'tool_name_12': 'Obsidian',
|
||||
'tool_desc_12': 'Knowledge management, bidirectional linking notes. A blessing for local note lovers.',
|
||||
'tool_name_13': 'Typora',
|
||||
'tool_desc_13': 'Markdown editor, simple and beautiful.',
|
||||
'tool_name_14': 'Docker',
|
||||
'tool_desc_14': 'Containerized deployment, docker-compose rules them all.',
|
||||
'tool_name_15': 'Premiere Pro',
|
||||
'tool_desc_15': 'Video editing, audio adjustment, simple effects, easy to use.',
|
||||
'tool_name_16': 'After Effects',
|
||||
'tool_desc_16': 'Special effects creation神器, but not friendly to GPU and CPU.',
|
||||
'tool_name_17': 'Cheat Engine',
|
||||
'tool_desc_17': 'Used it before Feng Ling Yue Ying came out, also a great choice for memory hooks.',
|
||||
'tool_name_18': 'x64dbg',
|
||||
'tool_desc_18': 'Kid! Want to master reverse power? Start with x64dbg!',
|
||||
'tool_name_19': 'WireGuard',
|
||||
'tool_desc_19': 'Networking神器, screw Sunflower, screw Todesk.',
|
||||
'tool_name_20': 'Syncthing',
|
||||
'tool_desc_20': 'File sync, super handy, great choice for syncing notes.',
|
||||
'tool_name_21': 'NeatReader',
|
||||
'tool_desc_21': 'Reading software, a bit regret spending 188 for lifetime.',
|
||||
'tool_name_22': 'Corel VideoStudio',
|
||||
'tool_desc_22': 'Evil Suzhou CorelMark! Give me back Pinnacle Studio.',
|
||||
'tool_name_23': 'Netease Cloud Music',
|
||||
'tool_desc_23': 'Listen and use daily, premium annual VIP + copyright unlock Unblock Netease.',
|
||||
'tool_name_24': 'Ximalaya Audiobook',
|
||||
'tool_desc_24': 'Listen and use daily. Great books like Three Body, Poor Man\'s Past and Future etc.',
|
||||
'tool_name_25': 'A Diary',
|
||||
'tool_desc_25': 'Who writes a diary anyway?!',
|
||||
'tool_name_26': 'Ollama',
|
||||
'tool_desc_26': 'Local AI deployment, fine-tuning models, 32b is too much for 4070.',
|
||||
'tool_name_27': 'AnythingLLM',
|
||||
'tool_desc_27': 'An excellent choice for AI knowledge base, better than my own fine-tuning + vectorization.',
|
||||
'tool_name_28': 'UVR5',
|
||||
'tool_desc_28': 'Audio processing神器, what hardships were separating audio back then!',
|
||||
'tool_name_29': 'Remote Desktop Manager',
|
||||
'tool_desc_29': 'Super powerful remote control software.',
|
||||
'tool_name_30': 'SyncClipboard',
|
||||
'tool_desc_30': 'Clipboard sync, handy, love it. No more copying/pasting via WeChat messages.',
|
||||
'tool_name_31': 'QtScrcpy',
|
||||
'tool_desc_31': 'LAN phone control tool, remote adb is awesome.',
|
||||
}
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1765160414503" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7686" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M552.228 398.154c-49.558-17.522-104.756-0.952-136.472 40.966-31.714 41.918-32.65 99.542-2.314 142.468 30.336 42.928 84.968 61.28 135.07 45.38 50.1-15.904 84.146-62.404 84.174-114.968V128.14c163.208 51.25 281.6 203.716 281.6 383.86 0 222.182-180.104 402.286-402.286 402.286S109.714 734.18 109.714 512 289.82 109.714 512 109.714c13.558 0 26.994 0.684 40.228 2.012v286.428z" fill="#FE544A" p-id="7687"></path></svg>
|
||||
|
Before Width: | Height: | Size: 745 B |