Compare commits

..

No commits in common. "main" and "v1.0.1" have entirely different histories.
main ... v1.0.1

7 changed files with 292 additions and 320 deletions

View File

@ -759,7 +759,7 @@ spec:
- $formkit: text - $formkit: text
name: url name: url
label: 接口地址 label: 接口地址
help: 需要安装爱发电插件 help: 需要安装爱发电插件
- $formkit: number - $formkit: number
name: showNum name: showNum
label: 最大展示条数 label: 最大展示条数

View File

@ -379,24 +379,10 @@ let halo = {
function getPower() { function getPower() {
const url = GLOBAL_CONFIG.source.power.url; const url = GLOBAL_CONFIG.source.power.url;
let powerStar = document.getElementById("power-star")
powerStar.href = GLOBAL_CONFIG.source.power.powerLink
fetch(url) fetch(url)
.then(response => { .then(res => res.json())
// 检查响应状态码
if (!response.ok) {
// 如果响应状态码不是 200抛出一个错误
powerStar.innerHTML = `
<div id="power-star-image" style="background-image: url('/themes/theme-hao/assets/images/afadian/afadian.webp')">
</div>
<div class="power-star-body">
<div id="power-star-title">还没有人赞助</div>
<div id="power-star-desc">为爱发电点击赞助</div>
</div>`;
}
return response.json(); // 只有在状态码为 200 时才解析 JSON
})
.then(data => { .then(data => {
console.log(data)
if (200 === data["ec"]) { if (200 === data["ec"]) {
const values = data["data"]["list"]; const values = data["data"]["list"];
saveToLocal.set('power-data', JSON.stringify(values), 10 / (60 * 24)) saveToLocal.set('power-data', JSON.stringify(values), 10 / (60 * 24))
@ -404,6 +390,8 @@ let halo = {
} }
}) })
.catch(error => { .catch(error => {
let powerStar = document.getElementById("power-star")
powerStar.href = GLOBAL_CONFIG.source.power.powerLink
powerStar.innerHTML = ` powerStar.innerHTML = `
<div id="power-star-image" style="background-image: url('/themes/theme-hao/assets/images/afadian/afadian.webp')"> <div id="power-star-image" style="background-image: url('/themes/theme-hao/assets/images/afadian/afadian.webp')">
</div> </div>

View File

@ -115,7 +115,7 @@ var heo = {
function getLinks() { function getLinks() {
const fetchUrl = const fetchUrl =
"/apis/api.plugin.halo.run/v1alpha1/plugins/PluginLinks/links?keyword=" "/apis/api.plugin.halo.run/v1alpha1/plugins/PluginLinks/links?keyword=&sort=priority,asc"
fetch(fetchUrl) fetch(fetchUrl)
.then(res => res.json()) .then(res => res.json())
.then(json => { .then(json => {

View File

@ -7477,7 +7477,7 @@ span.fund_name {
height: 60px; height: 60px;
border-radius: 50%; border-radius: 50%;
background-size: cover; background-size: cover;
/* margin-right: 12px; */ margin-right: 12px;
border: var(--style-border-always); border: var(--style-border-always);
transition: .3s ease-out transition: .3s ease-out
} }
@ -7533,8 +7533,7 @@ div#power-star-title {
flex-wrap: wrap; flex-wrap: wrap;
position: relative; position: relative;
width: calc(100% - 68px); width: calc(100% - 68px);
justify-content: center; justify-content: center
padding-left: 12px;
} }
/* 商务广告-设计周刊 */ /* 商务广告-设计周刊 */
@ -10016,7 +10015,7 @@ span.recent-post-top-text {
} }
/* 作者打招呼 */ /* 作者打招呼 */
/* div#author-info__sayhi { div#author-info__sayhi {
text-align: left; text-align: left;
color: var(--heo-white); color: var(--heo-white);
background: var(--heo-white-op); background: var(--heo-white-op);
@ -10028,7 +10027,7 @@ span.recent-post-top-text {
cursor: pointer; cursor: pointer;
-webkit-user-select: none; -webkit-user-select: none;
transition: 0.3s; transition: 0.3s;
} */ }
div#author-info__sayhi:hover { div#author-info__sayhi:hover {
background: var(--heo-white-op); background: var(--heo-white-op);
@ -10440,7 +10439,7 @@ a.extend.prev {
} }
#post-info .post-title { #post-info .post-title {
width: 1200px; width: 1100px;
font-size: 2.6rem !important; font-size: 2.6rem !important;
} }
} }
@ -16337,7 +16336,7 @@ span.hexo-douban-pagenum {
padding: 1rem; padding: 1rem;
border-radius: 12px; border-radius: 12px;
border: var(--style-border-always); border: var(--style-border-always);
width: calc((100% / 4) - 0.5rem); width: calc((100% / 6) - 0.5rem);
margin: 0rem 0.25rem 0.5rem 0.25rem; margin: 0rem 0.25rem 0.5rem 0.25rem;
box-shadow: var(--heo-shadow-border); box-shadow: var(--heo-shadow-border);
} }
@ -16349,12 +16348,11 @@ span.hexo-douban-pagenum {
@media screen and (max-width: 1200px) { @media screen and (max-width: 1200px) {
.author-content-item.single.reward .reward-list-all .reward-list-item { .author-content-item.single.reward .reward-list-all .reward-list-item {
width: calc((100% / 3) - 0.5rem); width: calc((100% / 4) - 0.5rem);
} }
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar {
/* display: none; */ width: 32%;
/* width: 32%; */
} }
} }
@ -16363,19 +16361,19 @@ span.hexo-douban-pagenum {
width: calc((100% / 2) - 0.5rem); width: calc((100% / 2) - 0.5rem);
} }
/* .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar {
width: 20%; width: 20%;
} */ }
} }
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
.author-content-item.single.reward .reward-list-all .reward-list-item { .author-content-item.single.reward .reward-list-all .reward-list-item {
width: calc((100% / 2) - 0.5rem); width: 100%;
} }
/* .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar {
width: 9%; width: 9%;
} */ }
} }
@media screen and (max-width: 520px) { @media screen and (max-width: 520px) {
@ -16383,9 +16381,9 @@ span.hexo-douban-pagenum {
width: 100%; width: 100%;
} }
/* .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar {
width: 20%; width: 20%;
} */ }
} }
.author-content-item.single.reward .author-content-item-description { .author-content-item.single.reward .author-content-item-description {
@ -16408,34 +16406,19 @@ span.hexo-douban-pagenum {
width: 100%; width: 100%;
} }
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-container {
display: flex;
justify-content: flex-start;
justify-content: space-between;
height: auto;
}
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-container .reward-list-item-content {
flex: 2;
display: flex;
flex-direction: column;
justify-content: space-between;
margin-left: 15px;
}
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar {
width: 80px; width: 32%;
float: left; float: left;
z-index: 10; z-index: 10;
position: static; position: static;
height: 80px; height: 40px;
/* transform: translateY(-40%); */ transform: translateY(-40%);
} }
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar img { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar img {
border-radius: 50%; border-radius: 50%;
width: 80px; width: 80%;
/* margin-top: 0.4rem; */ margin-top: 0.2rem;
} }
.author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar-group { .author-content-item.single.reward .reward-list-all .reward-list-item .reward-list-item-avatar-group {

View File

@ -1,90 +1,84 @@
<div class="author-content" th:if="${theme.config.aboutReward.aboutRewardEnable}" <div class="author-content" th:if="${theme.config.aboutReward.aboutRewardEnable}"
xmlns:th="http://www.w3.org/1999/xhtml"> xmlns:th="http://www.w3.org/1999/xhtml">
<div class="author-content-item single reward" id="about-reward"> <div class="author-content-item single reward" id="about-reward">
<div class="author-content-item-tips">致谢</div> <div class="author-content-item-tips">致谢</div>
<span class="author-content-item-title">[[${theme.config.aboutReward.title}]]</span> <span class="author-content-item-title">[[${theme.config.aboutReward.title}]]</span>
<div class="author-content-item-description"> <div class="author-content-item-description">
[[${theme.config.aboutReward.content}]] [[${theme.config.aboutReward.content}]]
</div> </div>
<div th:if="${theme.config.aboutReward.reward.enable_reward}" class="about-reward"> <div th:if="${theme.config.aboutReward.reward.enable_reward}" class="about-reward">
<div id="con"></div> <div id="con"></div>
<div id="TA-con" onclick="heo.rewardShowConsole()"> <div id="TA-con" onclick="heo.rewardShowConsole()">
<div id="text-con"> <div id="text-con">
<div id="linght"></div> <div id="linght"></div>
<div id="TA">[[${theme.config.aboutReward.reward.name}]]</div> <div id="TA">[[${theme.config.aboutReward.reward.name}]]</div>
</div>
</div>
<div id="tube-con">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#e5e9ef" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#e5e9ef"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#e5e9ef"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#e5e9ef"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
<div id="mask">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#f25d8e" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#f25d8e" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#f25d8e" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#f25d8e" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#f25d8e"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#f25d8e"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#f25d8e"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
</div>
<div id="orange-mask">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#ffd52b" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#ffd52b" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#ffd52b" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#ffd52b" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#ffd52b"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#ffd52b"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#ffd52b"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
</div>
<p id="people"><b>[[${theme.config.aboutReward.reward_list.size()}]]</b></p>
</div>
</div>
<div class="reward-list-all" th:if="${not #lists.isEmpty(theme.config.aboutReward.reward_list)}"
th:with="authorRewardList = ${theme.config.aboutReward.reward_list}">
<div class="reward-list-item" th:each="authorReward : ${authorRewardList}">
<div th:if="${not #strings.isEmpty(authorReward.avatar)}">
<div class="reward-list-item-container">
<!-- 头像 -->
<div class="reward-list-item-avatar">
<img th:src="${authorReward.avatar}" th:alt="${authorReward.name}">
</div>
<div class="reward-list-item-content">
<!-- 名称 -->
<div style="z-index:20;float: left;" class="reward-list-item-avatar-group">
<div class="reward-list-item-name">[[${authorReward.name}]]</div>
</div>
<!-- 金额及时间 -->
<div class="reward-list-bottom-group">
<div th:if="${#conversions.convert(authorReward.amount, 'java.math.BigDecimal') < #conversions.convert(theme.config.aboutReward.rewardNumber, 'java.math.BigDecimal')}" class="reward-list-item-money">¥
[[${authorReward.amount}]]
</div>
<div th:if="${#conversions.convert(authorReward.amount, 'java.math.BigDecimal') >= #conversions.convert(theme.config.aboutReward.rewardNumber, 'java.math.BigDecimal')}" class="reward-list-item-money"
style="background: var(--heo-vip);">¥ [[${authorReward.amount}]]
</div>
<time class="datatime reward-list-item-time">[[${authorReward.datatime}]]</time>
</div>
</div>
</div>
</div> </div>
</div>
<div id="tube-con">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#e5e9ef" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#e5e9ef" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#e5e9ef"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#e5e9ef"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#e5e9ef"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
<div id="mask">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#f25d8e" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#f25d8e" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#f25d8e" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#f25d8e" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#f25d8e"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#f25d8e"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#f25d8e"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
</div>
<div id="orange-mask">
<svg viewBox="0 0 1028 385" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 77H234.226L307.006 24H790" stroke="#ffd52b" stroke-width="20"></path>
<path d="M0 140H233.035L329.72 71H1028" stroke="#ffd52b" stroke-width="20"></path>
<path d="M1 255H234.226L307.006 307H790" stroke="#ffd52b" stroke-width="20"></path>
<path d="M0 305H233.035L329.72 375H1028" stroke="#ffd52b" stroke-width="20"></path>
<rect y="186" width="236" height="24" fill="#ffd52b"></rect>
<ellipse cx="790" cy="25.5" rx="25" ry="25.5" fill="#ffd52b"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 25)" fill="white"></circle>
<ellipse cx="790" cy="307.5" rx="25" ry="25.5" fill="#ffd52b"></ellipse>
<circle r="14" transform="matrix(1 0 0 -1 790 308)" fill="white"></circle>
</svg>
</div>
<p id="people"><b>[[${theme.config.aboutReward.reward_list.size()}]]</b></p>
</div>
</div>
<div class="reward-list-all" th:if="${not #lists.isEmpty(theme.config.aboutReward.reward_list)}"
th:with="authorRewardList = ${theme.config.aboutReward.reward_list}">
<div class="reward-list-item" th:each="authorReward : ${authorRewardList}">
<div th:if="${not #strings.isEmpty(authorReward.avatar)}">
<div>
<div class="reward-list-item-avatar">
<img th:src="${authorReward.avatar}" th:alt="${authorReward.name}">
</div>
<div style="z-index:20;float: left;" class="reward-list-item-avatar-group">
<div class="reward-list-item-name">[[${authorReward.name}]]</div>
</div>
</div>
<div class="reward-list-bottom-group">
<div th:if="${#conversions.convert(authorReward.amount, 'java.math.BigDecimal') < #conversions.convert(theme.config.aboutReward.rewardNumber, 'java.math.BigDecimal')}" class="reward-list-item-money">¥
[[${authorReward.amount}]]
</div>
<div th:if="${#conversions.convert(authorReward.amount, 'java.math.BigDecimal') >= #conversions.convert(theme.config.aboutReward.rewardNumber, 'java.math.BigDecimal')}" class="reward-list-item-money"
style="background: var(--heo-vip);">¥ [[${authorReward.amount}]]
</div>
<time class="datatime reward-list-item-time">[[${authorReward.datatime}]]</time>
</div>
</div>
<div th:if="${#strings.isEmpty(authorReward.avatar)}"> <div th:if="${#strings.isEmpty(authorReward.avatar)}">
<div class="reward-list-item-name">[[${authorReward.name}]]</div> <div class="reward-list-item-name">[[${authorReward.name}]]</div>
<div class="reward-list-bottom-group"> <div class="reward-list-bottom-group">

View File

@ -1,180 +1,187 @@
<!-- 数据统计&作者相关信息 --> <!-- 数据统计&作者相关信息 -->
<div class="author-content"> <div class="author-content">
<div class="about-statistic author-content-item" <div class="about-statistic author-content-item"
style="background: url(https://bu.dusays.com/2023/03/12/640dc8c72f623.webp);"> style="background: url(https://bu.dusays.com/2023/03/12/640dc8c72f623.webp);">
<div class="card-content"> <div class="card-content">
<div class="author-content-item-tips">数据</div> <div class="author-content-item-tips">数据</div>
<span class="author-content-item-title">访问统计</span> <span class="author-content-item-title">访问统计</span>
<div id="statistic"></div> <div id="statistic"></div>
<div class="post-tips">统计信息来自 <a href="https://v6.51.la/" rel="noopener nofollow" <div class="post-tips">统计信息来自 <a href="https://invite.51.la/1NzKqTeb?target=V6"
target="_blank">51la网站统计</a></div> rel="noopener nofollow"
<div class="banner-button-group"> target="_blank">51la网站统计</a></div>
<a class="banner-button" onclick="pjax.loadUrl('/archives')" data-pjax-state=""> <div class="banner-button-group">
<i class="haofont hao-icon-circle-arrow-up-right-1"></i> <a class="banner-button" onclick="pjax.loadUrl('/archives')" data-pjax-state="">
<span class="banner-button-text">文章隧道</span> <i class="haofont hao-icon-circle-arrow-up-right-1"></i>
</a> <span class="banner-button-text">文章隧道</span>
</div> </a>
</div> </div>
</div> </div>
</div>
<div class="author-content-item-group column mapAndInfo"> <div class="author-content-item-group column mapAndInfo">
<div class="author-content-item map single"> <div class="author-content-item map single">
<span class="map-title">我现在住在 <span class="map-title">我现在住在
<b>[[${theme.config.about.map.StrengthenTitle}]]</b> <b>[[${theme.config.about.map.StrengthenTitle}]]</b>
</span> </span>
</div> </div>
<div class="author-content-item selfInfo single" <div class="author-content-item selfInfo single"
th:if="${not #lists.isEmpty(theme.config.about.map.authorInfo)}" th:if="${not #lists.isEmpty(theme.config.about.map.authorInfo)}"
th:with="texts = ${theme.config.about.map.authorInfo}"> th:with="texts = ${theme.config.about.map.authorInfo}">
<div th:if="${theme.config.about.map.authorInfo.size()}>'0'"> <div th:if="${theme.config.about.map.authorInfo.size()}>'0'">
<span class="selfInfo-title" th:text="${texts[0].authorInfoTitle}">生于</span><span <span class="selfInfo-title"
class="selfInfo-content" id="selfInfo-content-year" th:text="${texts[0].authorInfoTitle}">生于</span><span
th:style="'color:' + ${texts[0].authorInfoColor}" class="selfInfo-content"
th:text="${texts[0].authorInfoContent}">2000</span> id="selfInfo-content-year" th:style="'color:' + ${texts[0].authorInfoColor}"
</div> th:text="${texts[0].authorInfoContent}">2000</span>
<div th:if="${theme.config.about.map.authorInfo.size()}>'1'"> </div>
<span class="selfInfo-title" th:text="${texts[1].authorInfoTitle}">太原理工大学</span><span <div th:if="${theme.config.about.map.authorInfo.size()}>'1'">
class="selfInfo-content" th:style="'color:' + ${texts[1].authorInfoColor}" <span class="selfInfo-title"
th:text="${texts[1].authorInfoContent}">计算机科学</span> th:text="${texts[1].authorInfoTitle}">太原理工大学</span><span
</div> class="selfInfo-content"
<div th:if="${theme.config.about.map.authorInfo.size()}>'2'"> th:style="'color:' + ${texts[1].authorInfoColor}"
<span class="selfInfo-title" th:text="${texts[2].authorInfoTitle}">现在职业</span><span th:text="${texts[1].authorInfoContent}">计算机科学</span>
class="selfInfo-content" th:style="'color:' + ${texts[2].authorInfoColor}" </div>
th:text="${texts[2].authorInfoContent}">BI工程师</span> <div th:if="${theme.config.about.map.authorInfo.size()}>'2'">
</div> <span class="selfInfo-title"
</div> th:text="${texts[2].authorInfoTitle}">现在职业</span><span
</div> class="selfInfo-content"
<style> th:style="'color:' + ${texts[2].authorInfoColor}"
.author-content-item.map { th:text="${texts[2].authorInfoContent}">BI工程师</span>
background: url([[${theme.config.about.map.background}]]) no-repeat center; </div>
min-height: 160px; </div>
max-height: 400px; </div>
position: relative; <style>
overflow: hidden; .author-content-item.map {
margin-bottom: 0.5rem; background: url([[${theme.config.about.map.background}]]) no-repeat center;
height: 60%; min-height: 160px;
background-size: 100%; max-height: 400px;
transition: 1s ease-in-out; position: relative;
} overflow: hidden;
margin-bottom: 0.5rem;
height: 60%;
background-size: 100%;
transition: 1s ease-in-out;
}
[data-theme=dark] .author-content-item.map { [data-theme=dark] .author-content-item.map {
background: url([[${theme.config.about.map.backgroundDark}]]) no-repeat center; background: url([[${theme.config.about.map.backgroundDark}]]) no-repeat center;
background-size: 100%; background-size: 100%;
} }
.author-content-item.map:hover { .author-content-item.map:hover {
background-size: 120%; background-size: 120%;
transition: 4s ease-in-out; transition: 4s ease-in-out;
background-position-x: 0; background-position-x: 0;
background-position-y: 36%; background-position-y: 36%;
} }
.author-content-item.map .map-title { .author-content-item.map .map-title {
position: absolute; position: absolute;
bottom: 0px; bottom: 0px;
left: 0px; left: 0px;
width: 100%; width: 100%;
background: var(--heo-maskbg); background: var(--heo-maskbg);
padding: 0.5rem 2rem; padding: 0.5rem 2rem;
backdrop-filter: saturate(180%) blur(20px); backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
transition: 1s ease-in-out; transition: 1s ease-in-out;
font-size: 20px; font-size: 20px;
border-radius: 0 0 1rem 1rem; border-radius: 0 0 1rem 1rem;
} }
.author-content-item.map:hover .map-title { .author-content-item.map:hover .map-title {
bottom: -100%; bottom: -100%;
border-radius: 0 0 1rem 1rem; border-radius: 0 0 1rem 1rem;
} }
.author-content-item.map .map-title b { .author-content-item.map .map-title b {
color: var(--heo-fontcolor); color: var(--heo-fontcolor);
} }
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
.author-content-item.map.myphoto { .author-content-item.map.myphoto {
background-size: cover !important; background-size: cover !important;
} }
.author-content-item.map .map-title { .author-content-item.map .map-title {
padding: 1rem; padding: 1rem;
} }
} }
</style> </style>
<!-- 关于统计--> <!-- 关于统计-->
<script defer> <script defer>
// 链接替换即可,不需要后面的参数 // 链接替换即可,不需要后面的参数
function initAboutPage() { function initAboutPage() {
fetch("https://v6-widget.51.la/v6/[[${theme.config.about.LingQueMonitorID}]]/quote.js") fetch("https://v6-widget.51.la/v6/[[${theme.config.about.LingQueMonitorID}]]/quote.js")
.then(res => res.text()) .then(res => res.text())
.then(data => { .then(data => {
let title = ["最近活跃", "今日人数", "今日访问", "昨日人数", "昨日访问", "本月访问", "总访问量"]; let title = ["最近活跃", "今日人数", "今日访问", "昨日人数", "昨日访问", "本月访问", "总访问量"];
// let num = data.match(/(?<=<\/span><span>).*?(?=<\/span><\/p>)/g) // let num = data.match(/(?<=<\/span><span>).*?(?=<\/span><\/p>)/g)
let num = data.match(/(<\/span><span>).*?(\/span><\/p>)/g); let num = data.match(/(<\/span><span>).*?(\/span><\/p>)/g);
num = num.map(el => { num = num.map(el => {
let val = el.replace(/(<\/span><span>)/g, ""); let val = el.replace(/(<\/span><span>)/g, "");
let str = val.replace(/(<\/span><\/p>)/g, ""); let str = val.replace(/(<\/span><\/p>)/g, "");
return str; return str;
}); });
let statisticEl = document.getElementById("statistic"); let statisticEl = document.getElementById("statistic");
// 自定义不显示哪个或者显示哪个,如下为不显示 最近活跃访客 和 总访问量 // 自定义不显示哪个或者显示哪个,如下为不显示 最近活跃访客 和 总访问量
let statistic = []; let statistic = [];
for (let i = 0; i < num.length; i++) { for (let i = 0; i < num.length; i++) {
if (!statisticEl) return; if (!statisticEl) return;
if (i == 0) continue; if (i == 0) continue;
statisticEl.innerHTML += statisticEl.innerHTML +=
"<div><span>" + title[i] + "</span><span id=" + title[i] + ">" + num[i] + "</span></div>"; "<div><span>" + title[i] + "</span><span id=" + title[i] + ">" + num[i] + "</span></div>";
queueMicrotask(() => { queueMicrotask(() => {
statistic.push( statistic.push(
new CountUp(title[i], 0, num[i], 0, 2, { new CountUp(title[i], 0, num[i], 0, 2, {
useEasing: true, useEasing: true,
useGrouping: true, useGrouping: true,
separator: ",", separator: ",",
decimal: ".", decimal: ".",
prefix: "", prefix: "",
suffix: "", suffix: "",
}) })
); );
}); });
} }
let statisticElement = document.querySelector(".about-statistic.author-content-item"); let statisticElement = document.querySelector(".about-statistic.author-content-item");
function statisticUP() { function statisticUP() {
if (!statisticElement) return; if (!statisticElement) return;
const callback = (entries, observer) => { const callback = (entries, observer) => {
entries.forEach(entry => { entries.forEach(entry => {
if (entry.isIntersecting) { if (entry.isIntersecting) {
for (let i = 0; i < num.length; i++) { for (let i = 0; i < num.length; i++) {
if (i == 0) continue; if (i == 0) continue;
queueMicrotask(() => { queueMicrotask(() => {
statistic[i - 1].start(); statistic[i - 1].start();
}); });
} }
observer.disconnect(); // 停止观察元素,因为不再需要触发此回调 observer.disconnect(); // 停止观察元素,因为不再需要触发此回调
} }
}); });
}; };
const options = { const options = {
root: null, root: null,
rootMargin: "0px", rootMargin: "0px",
threshold: 0 threshold: 0
}; };
const observer = new IntersectionObserver(callback, options); const observer = new IntersectionObserver(callback, options);
observer.observe(statisticElement); observer.observe(statisticElement);
} }
statisticUP() statisticUP()
}); });
} }
initAboutPage(); initAboutPage();
</script>
</script>
</div> </div>

View File

@ -51,5 +51,5 @@ spec:
repo: https://gitea.uptoz.cn/UPToZ/halo-theme-hao repo: https://gitea.uptoz.cn/UPToZ/halo-theme-hao
settingName: "theme-hao-setting" settingName: "theme-hao-setting"
configMapName: "theme-hao-configMap" configMapName: "theme-hao-configMap"
version: "1.0.2-ce" version: "1.0.1-ce"
require: ">=2.10.0" require: ">=2.10.0"