Merge pull request #502 from chengzhongxue/main

更新1.3.9
This commit is contained in:
困困鱼 2023-09-23 03:08:02 +08:00 committed by GitHub
commit 8195075c8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 652 additions and 533 deletions

View File

@ -1,3 +1,42 @@
apiVersion: v1alpha1
kind: AnnotationSetting
metadata:
generateName: annotation-setting-
spec:
targetRef:
group: content.halo.run
kind: Post
formSchema:
- $formkit: "radio"
name: "copyrightEnable"
id: "copyrightEnable"
key: "copyrightEnable"
label: "显示版权声明"
value: "true"
options:
- label: "显示"
value: "true"
- label: "隐藏"
value: "false"
- $formkit: "radio"
name: "copyrightType"
if: "$get(copyrightEnable).value == 'true'"
label: "版权声明类型"
value: "original"
options:
- label: "原创"
value: "original"
- label: "转载"
value: "reprint"
- $formkit: "text"
name: "copyrightUrl"
if: "$get(copyrightEnable).value == 'true'"
label: "版权声明链接"
help: "默认后台设置链接"
placeholder: "请输入链接"
---
apiVersion: v1alpha1
kind: AnnotationSetting
metadata:
@ -15,9 +54,9 @@ spec:
value: "0"
label: "该菜单的子菜单是否为垂直菜单"
options:
- label:
- label: "是"
value: "1"
- label:
- label: "否"
value: "0"
---
@ -27,20 +66,20 @@ metadata:
generateName: annotation-setting-
spec:
targetRef:
group: "core.halo.run"
group: core.halo.run
kind: LinkGroup
formSchema:
- $formkit: "radio"
name: "displayStyle"
label: "分组方式"
value: default
value: "default"
options:
- label: 默认
value: default
- label: 美化
value: beautify
- label: 失联
value: deprecated
- label: "默认"
value: "default"
- label: "美化"
value: "beautify"
- label: "失联"
value: "deprecated"
- $formkit: "textarea"
name: "description"
label: "描述"
@ -53,7 +92,7 @@ metadata:
generateName: annotation-setting-
spec:
targetRef:
group: "core.halo.run"
group: core.halo.run
kind: Link
formSchema:
- $formkit: "attachment"
@ -75,7 +114,7 @@ metadata:
generateName: annotation-setting-
spec:
targetRef:
group: "core.halo.run"
group: core.halo.run
kind: PhotoGroup
formSchema:
- $formkit: "attachment"

View File

@ -1,6 +1,6 @@
{
"name": "halo-theme-hao",
"version": "1.3.8",
"version": "1.3.9",
"dependencies": {
}
}

View File

@ -602,7 +602,7 @@ spec:
name: stickerImg
if: $get(profileStyle).value == 'one'
label: 贴纸
value: https://0206.ink/upload/omxo3N22290781690363822143.png
value: https://kunkunyu.com/upload/omxo3N22290781690363822143.png
placeholder: 请输入图片地址
- $formkit: text
if: $get(profileStyle).value == 'one'
@ -641,6 +641,8 @@ spec:
value: hao-icon-weixin
- label: 公众号
value: hao-icon-weixingongzhonghao
- label: rss
value: hao-icon-rss
- label: 腾讯 QQ
value: hao-icon-qq
- label: 新浪微博
@ -764,23 +766,23 @@ spec:
- $formkit: textarea
name: lightMsimg
label: 浅色卡片
value: https://card-music.0206.ink/?id=xxxxx&theme=card&themeColor=e60026&mode=light&size=300&show_random=1
help: https://card-music.0206.ink/?id=xxxxx&theme=card&themeColor=e60026&mode=light&size=300&show_random=1
value: https://card-music.yyds.pink/?id=xxxxx&theme=card&themeColor=e60026&mode=light&size=300&show_random=1
help: https://card-music.yyds.pink/?id=xxxxx&theme=card&themeColor=e60026&mode=light&size=300&show_random=1
- $formkit: textarea
name: lightBackMsimg
label: 浅色翻页卡片
value: https://card-music.0206.ink/?id=xxxxx&size=60&type=1&mode=light&title=%E6%9C%80%E8%BF%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
help: https://card-music.0206.ink/?id=xxxxx&size=60&type=1&mode=light&title=%E6%9C%80%E8%BF%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
value: https://card-music.yyds.pink/?id=xxxxx&size=60&type=1&mode=light&title=%E6%9C%80%E8%BF%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
help: https://card-music.yyds.pink/?id=xxxxx&size=60&type=1&mode=light&title=%E6%9C%80%E8%BF%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
- $formkit: textarea
name: darkMsimg
label: 深色卡片
value: https://card-music.0206.ink/?id=xxxxx&theme=card&themeColor=e60026&mode=dark&size=300&show_random=1
help: https://card-music.0206.ink/?id=xxxxx&theme=card&themeColor=e60026&mode=dark&size=300&show_random=1
value: https://card-music.yyds.pink/?id=xxxxx&theme=card&themeColor=e60026&mode=dark&size=300&show_random=1
help: https://card-music.yyds.pink/?id=xxxxx&theme=card&themeColor=e60026&mode=dark&size=300&show_random=1
- $formkit: textarea
name: darkBackMsimg
label: 深色翻页卡片
value: https://card-music.0206.ink/?id=xxxxx&size=60%E2%80%A6F%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
help: https://card-music.0206.ink/?id=xxxxx&size=60%E2%80%A6F%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
value: https://card-music.yyds.pink/?id=xxxxx&size=60%E2%80%A6F%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
help: https://card-music.yyds.pink/?id=xxxxx&size=60%E2%80%A6F%91%E5%B8%B8%E5%90%AC%E6%A6%9C%E5%8D%95&number=6
- $formkit: group
name: steam
label: Steam卡片
@ -961,6 +963,8 @@ spec:
value: hao-icon-weixin
- label: 公众号
value: hao-icon-weixingongzhonghao
- label: rss
value: hao-icon-rss
- label: 腾讯 QQ
value: hao-icon-qq
- label: 新浪微博
@ -1042,6 +1046,8 @@ spec:
value: hao-icon-weixin
- label: 公众号
value: hao-icon-weixingongzhonghao
- label: rss
value: hao-icon-rss
- label: 腾讯 QQ
value: hao-icon-qq
- label: 新浪微博
@ -1141,9 +1147,9 @@ spec:
style_one:
owner_enable: false
runtime_enable: true
work_img: "https://0206.ink/upload/%E5%9B%B0%E5%9B%B0%E9%B1%BC-%E4%B8%8B%E7%8F%AD%E5%95%A6-yellowgreen.svg"
work_img: "https://kunkunyu.com/upload/%E5%9B%B0%E5%9B%B0%E9%B1%BC-%E4%B8%8B%E7%8F%AD%E5%95%A6-yellowgreen.svg"
work_description: "距离月入25k也就还差一个大佬带我~"
offduty_img: "https://0206.ink/upload/%E5%9B%B0%E5%9B%B0%E9%B1%BC-%E4%B8%8B%E7%8F%AD%E5%95%A6-yellowgreen.svg"
offduty_img: "https://kunkunyu.com/upload/%E5%9B%B0%E5%9B%B0%E9%B1%BC-%E4%B8%8B%E7%8F%AD%E5%95%A6-yellowgreen.svg"
offduty_description: "下班了就该开开心心的玩耍,嘿嘿~"
bdageitem_enable: false
bdageitem:
@ -1252,16 +1258,6 @@ spec:
- label: 关闭
value: false
help: 文章主色匹配图片颜色
- $formkit: radio
name: summarize
label: 文章摘要(首页)
value: false
options:
- label: 打开
value: true
- label: 关闭
value: false
help: 是否显示文章摘要
- $formkit: group
name: aiDescription
label: 文章 AI 摘要
@ -1421,27 +1417,29 @@ spec:
- $formkit: group
name: copyrights
label: 版权声明
help: 需要在发布文章时的元数据上选显示版权声明才可以生效
value:
enable: false
content:
content: '本文是原创文章,采用 <a target="_blank" href="/cc">CC BY-NC-ND 4.0</a> 协议,完整转载请注明来自 <a href="/" target="_blank" >程序员小航</a>'
reprintContent: '本文是转载文章,版权归原作者所有。建议访问原文,转载本文请联系原作者。'
children:
- $formkit: radio
name: enable
id: enable
key: enable
value: false
options:
- label: 打开
value: true
- label: 关闭
value: false
help: 文章底部显示版权声明模块
- $formkit: "text"
name: "originalUrl"
label: "原创链接"
placeholder: "请输入链接"
- $formkit: "text"
name: "reprintUrl"
label: "转载链接"
placeholder: "请输入链接"
- $formkit: textarea
if: $get(enable).value
name: content
label: 声明内容
label: 原创声明内容
placeholder: '本文是原创文章,采用 <a target="_blank" href="/cc">CC BY-NC-ND 4.0</a> 协议,完整转载请注明来自 <a href="/" target="_blank" >程序员小航</a>'
help: 支持 HTML 语法
- $formkit: textarea
name: reprintContent
label: 转载声明内容
placeholder: '本文是转载文章,版权归原作者所有。建议访问原文,转载本文请联系原作者。'
help: 支持 HTML 语法
- $formkit: select
name: recommendQuantity
label: 阅读建议
@ -1562,7 +1560,7 @@ spec:
placeholder: 请输入跳转 url
- $formkit: url
name: apiurl
value: "https://moments.0206.ink/"
value: "https://moments.kunkunyu.com/"
label: token地址
placeholder: 请输入token地址
- $formkit: radio
@ -1614,6 +1612,12 @@ spec:
key: bigTitle
label: 大标题
value: 这里是我的相册集哦😯
- $formkit: text
name: topLink
key: topLink
if: $get(photosStyle).value == 'default'
label: 返回地址 (填写图库分组地址)
value: "/album"
- $formkit: text
if: $get(photosStyle).value == 'default'
name: detail
@ -2040,18 +2044,22 @@ spec:
label: 地图相关配置
value:
StrengthenTitle:
mapLocation: 22.582401,113.215456
background:
backgroundDark:
authorInfo:
children:
- $formkit: text
name: StrengthenTitle
label: 居住地
placeholder: 请输入内容
- $formkit: text
name: mapLocation
label: 居住地经纬度坐标
help: 可访问 https://lbs.qq.com/getPoint 拾取坐标示例22.582401,113.215456
placeholder: 请输入经纬度坐标
- $formkit: attachment
name: background
label: 地图亮色模式背景
placeholder: 请输入内容
- $formkit: attachment
name: backgroundDark
label: 地图暗色模式背景
placeholder: 请输入内容
- $formkit: repeater
name: authorInfo
label: 个人信息
@ -2293,7 +2301,7 @@ spec:
name: lazyload
label: 评论懒加载
value: false
help: 当评论进入浏览器的视窗时,将加载评论系统。
help: 当评论进入浏览器的视窗时,将加载评论系统。(不建议使用,定位不到评论位置)
options:
- label: 打开
value: true
@ -2374,6 +2382,7 @@ spec:
serverURL: ""
walinesJs: ""
walinesCss: ""
locale: "{'placeholder': '欢迎评论', 'sofa': '来发评论吧~1'}"
children:
- $formkit: url
name: serverURL
@ -2394,6 +2403,13 @@ spec:
label: Waline评论 - css
placeholder: 请输入css文件地址
help: 主题的walines版本是最新版本(如果你使用的不是最新版本请自己引入css文件)
- $formkit: code
name: locale
height: 200px
label: 选项
placeholder: 请输入json格式数据
help: "格式:{'placeholder': '欢迎评论', 'sofa': '来发评论吧~1'} 更多请查看文档https://waline.js.org/cookbook/customize/locale.html#%E4%BE%8B%E5%AD%90"
language: json
- $formkit: group
if: ($get(use).value == 'Twikoo' || $get(use).value == 'Artalk' || $get(use).value == 'Waline' ) && $get(commentsEnable).value
name: visitorMail

View File

@ -39,91 +39,84 @@
<th:block th:replace="~{modules/about-widgets :: about-widgets(${theme.config.about.widgets})}"></th:block>
</div>
<div class="author-content">
<div class="create-site-post author-content-item single" th:utext="${theme.config.about.xjlc}">
<div class="author-content">
<div class="create-site-post author-content-item single" th:utext="${theme.config.about.xjlc}">
</div>
</div>
</div>
<div class="author-content">
<div class="author-content-item single reward" id="about-reward">
<div class="author-content-item-tips">致谢</div>
<span class="author-content-item-title" >[[${theme.config.aboutReward.title}]]</span>
<div class="author-content-item-description" >
[[${theme.config.aboutReward.content}]]
</div>
<div th:if="${theme.config.aboutReward.reward.enable_reward}" class="about-reward">
<div id="con"></div>
<div id="TA-con" onclick="heo.rewardShowConsole()">
<div id="text-con">
<div id="linght"></div>
<div id="TA">[[${theme.config.aboutReward.reward.name}]]</div>
</div>
<div class="author-content">
<div class="author-content-item single reward" id="about-reward">
<div class="author-content-item-tips">致谢</div>
<span class="author-content-item-title" >[[${theme.config.aboutReward.title}]]</span>
<div class="author-content-item-description" >
[[${theme.config.aboutReward.content}]]
</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 class="reward-list-item-name">[[${authorReward.name}]]</div>
<div class="reward-list-bottom-group">
<div th:if="${authorReward.sign == 'N'}" class="reward-list-item-money">¥
[[${authorReward.amount}]]</div>
<div th:if="${authorReward.sign == 'Y'}" class="reward-list-item-money"
style="background: var(--heo-vip);">¥ [[${authorReward.amount}]]
<div th:if="${theme.config.aboutReward.reward.enable_reward}" class="about-reward">
<div id="con"></div>
<div id="TA-con" onclick="heo.rewardShowConsole()">
<div id="text-con">
<div id="linght"></div>
<div id="TA">[[${theme.config.aboutReward.reward.name}]]</div>
</div>
<time class="datatime reward-list-item-time">[[${authorReward.datatime}]]</time>
</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 class="reward-list-item-name">[[${authorReward.name}]]</div>
<div class="reward-list-bottom-group">
<div th:if="${authorReward.sign == 'N'}" class="reward-list-item-money">¥
[[${authorReward.amount}]]</div>
<div th:if="${authorReward.sign == 'Y'}" 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>
<!-- 评论模块 -->
</main>
<!-- 底部 -->
<footer th:replace="~{modules/footer :: footer}"></footer>

View File

@ -8,6 +8,7 @@
dark: 'html[data-theme="dark"]',
path: window.location.pathname,
comment: false,
locale:GLOBAL_CONFIG.source.waline.locale
}, null))
}

View File

@ -434,13 +434,18 @@ var heo = {
document.getElementById("toPageButton").href = e)
},
changeSayHelloText: function() {
const e = GLOBAL_CONFIG.helloText.length == 0 ? ["🤖️ 数码科技爱好者", "🔍 分享与热心帮助", "🏠 智能家居小能手", "🔨 设计开发一条龙", "🤝 专修交互与设计", "🏃 脚踏实地行动派", "🧱 团队小组发动机", "💢 壮汉人狠话不多"] : GLOBAL_CONFIG.helloText
, t = document.getElementById("author-info__sayhi");
let o = e[Math.floor(Math.random() * e.length)];
for (; o === lastSayHello; )
o = e[Math.floor(Math.random() * e.length)];
t.textContent = o,
lastSayHello = o
const greetings = GLOBAL_CONFIG.helloText.length == 0 ? ["🤖️ 数码科技爱好者", "🔍 分享与热心帮助", "🏠 智能家居小能手", "🔨 设计开发一条龙", "🤝 专修交互与设计", "🏃 脚踏实地行动派", "🧱 团队小组发动机", "💢 壮汉人狠话不多"] : GLOBAL_CONFIG.helloText
, authorInfoSayHiElement = document.getElementById("author-info__sayhi");
// 如果只有一个问候语,设置为默认值
if (greetings.length === 1) {
authorInfoSayHiElement.textContent = greetings[0];
return;
}
let randomGreeting = greetings[Math.floor(Math.random() * greetings.length)];
for (; randomGreeting === lastSayHello; )
randomGreeting = greetings[Math.floor(Math.random() * greetings.length)];
authorInfoSayHiElement.textContent = randomGreeting,
lastSayHello = randomGreeting
},
//匿名评论

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1743,33 +1743,9 @@ blockquote footer cite::before {
-webkit-line-clamp: 3;
}
#recent-posts>.recent-post-item .recent-post-info .pinned-post {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
color: var(--heo-lighttext);
font-size: .5rem;
position: absolute;
top: 5px;
}
@media screen and (max-width: 768px) {
#recent-posts>.recent-post-item .recent-post-info .pinned-post {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
color: var(--heo-lighttext);
font-size: .5rem;
position: absolute;
top: -19px;
}
#recent-posts .recent-post-item {
-webkit-box-orient: vertical;
flex-direction: column;
@ -8506,7 +8482,7 @@ li {
.recent-post-item .recent-post-info .recent-post-info-top {
position: relative;
transition: 0.3s;
padding: 32px;
padding: 0 32px;
width: 100%;
}
@ -8525,17 +8501,73 @@ li {
-webkit-box-orient: vertical;
}
/*.recent-post-item .recent-post-info .recent-post-info-top .pinned-post {*/
/* display: none;*/
/*}*/
.recent-post-item .recent-post-info .recent-post-info-top .original {
display: flex;
color: var(--heo-secondtext);
font-size: .5rem;
position: relative;
margin-right: 8px
}
.recent-post-info-top-tips {
display: flex;
margin-top: 20px;
user-select: none
}
@media screen and (max-width: 768px) {
.recent-post-info-top-tips {
display:none
}
}
#recent-posts>.recent-post-item>.recent-post-info .sticky-warp {
line-height: 23px;
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
-webkit-box-align: center;
-moz-box-align: center;
-o-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-moz-box-pack: center;
-o-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
margin-right: 8px
}
#recent-posts>.recent-post-item>.recent-post-info .sticky {
color: #ff7242;
font-size: 12px
}
.recent-post-item .recent-post-info .recent-post-info-top .lastestpost {
display:flex;
color: var(--heo-secondtext);
font-size: .5rem;
position: relative;
margin-right: 8px
}
.recent-post-item .recent-post-info .recent-post-info-top a.unvisited-post {
display: flex;
color: var(--heo-secondtext);
font-size: .5rem;
position: relative
}
.recent-post-item .recent-post-info .recent-post-info-top a.unvisited-post:visited {
color: var(--heo-card-bg);
}
@media screen and (min-width: 1300px) {
#recent-posts > .recent-post-item .pinned-post {
display: flex;
color: var(--heo-lighttext);
font-size: 0.5rem;
position: relative;
}
#recent-posts .recent-post-item.pinned-post-item .recent-post-info-top {
padding-top: 16px;
@ -8567,6 +8599,7 @@ li {
}
.recent-post-item .recent-post-info .recent-post-info-top .content {
opacity: 0;
transition: 0.3s;
display: -webkit-box;
overflow: hidden;
@ -9371,14 +9404,6 @@ span.recent-post-top-text {
padding: 0.5rem 20px;
}
a.article-meta__categories {
left: 12px !important;
top: 12px !important;
border-radius: 4px !important;
padding: 2px 9px !important;
font-size: 12px;
}
#bbTimeList {
margin-bottom: 0rem;
}
@ -9470,35 +9495,6 @@ span.recent-post-top-text {
margin-top: 20px!important;
} */
.article-meta__categories {
position: absolute;
top: 8px;
left: 8px;
display: flex;
}
/* 自定义的文章分类 */
a.article-meta__category {
display: block;
padding: 2px 6px;
background: var(--heo-black-op);
border-radius: 6px;
margin: 0 5px 0 0;
font-size: 12px;
margin-left: 4px;
font-weight: bold;
color: var(--heo-white);
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: blur(20px);
}
a.article-meta__category:hover {
background: var(--heo-theme) !important;
color: var(--heo-white) !important;
box-shadow: var(--heo-shadow-theme);
}
/* 文章卡片标题 */
#recent-posts > .recent-post-item > .recent-post-info > .article-title {
line-height: 1.4;
@ -15509,65 +15505,7 @@ span.hexo-douban-pagenum {
width: 59%;
}
/* 关于页面地图 */
.author-content-item.map {
background: url(https://img.zhheo.com/i/2022/08/31/630ef8e827401.webp) no-repeat center;
min-height: 160px;
max-height: 400px;
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 {
background: url(https://img.zhheo.com/i/2022/08/31/630ef8db0fefe.webp) no-repeat center;
background-size: 100%;
}
.author-content-item.map:hover {
background-size: 120%;
transition: 4s ease-in-out;
background-position-x: 0;
background-position-y: 36%;
}
.author-content-item.map .map-title {
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
background: var(--heo-maskbg);
padding: 0.5rem 2rem;
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: blur(20px);
transition: 1s ease-in-out;
font-size: 20px;
}
.author-content-item.map:hover .map-title {
bottom: -100%;
}
.author-content-item.map .map-title b {
color: var(--heo-fontcolor);
}
@media screen and (max-width: 768px) {
.author-content-item.map.myphoto {
background-size: cover !important;
}
.author-content-item.map .map-title {
padding: 1rem;
}
}
/* 关于页面自我信息 */
.author-content-item.selfInfo {
display: flex;
min-height: 100px;

View File

@ -156,6 +156,80 @@
document.addEventListener('pjax:complete', newestCommentInit)
})
</script>
<style>
.atk-sidebar-layer {
top: 10%;
left: 20%;
width: 60%;
height: 80%;
transform: translateY(120%);
border-radius: 12px;
padding: 10px 0;
background: #FFF;
}
@media only screen and (max-width: 600px) {
.atk-sidebar-layer {
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: 0
}
}
.atk-layer-wrap .atk-layer-mask {
backdrop-filter: blur(10px);
}
.atk-main-editor>.atk-bottom .atk-plug-btn:not(:last-child) {
border-right: 1px solid var(--at-color-border);
}
.atk-main-editor>.atk-bottom .atk-plug-btn {
display: inline-flex;
align-content: center;
justify-content: center;
}
.atk-comment>.atk-avatar {
width: 48px;
height: 48px
}
.atk-comment>.atk-avatar img {
width: 48px;
height: 48px;
border-radius: 50%;
transition: all .3s ease;
}
.atk-comment>.atk-avatar img:hover {
transform: scale(1.2);
border-radius: 4px
}
.atk-comment>.atk-avatar img.error:before {
width: 48px !important;
height: 48px !important;
border-radius: 3px
}
.atk-comment>.atk-avatar img.error:after {
display: none
}
#owo-big p {
color: var(--at-color-meta);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
text-align: center;
font-size: 12px;
margin: 0;
margin-top: -14px!important;
}
</style>
</th:block>

View File

@ -72,7 +72,7 @@
})
saveToLocal.set('waline-newest-comments', JSON.stringify(walineArray), 10 / (60 * 24))
generateHtml(walineArray)
document.querySelector('#newcomm') && necommHtml(artalk)
document.querySelector('#newcomm') && necommHtml(walineArray)
}).catch(e => {
const $dom = document.querySelector('#card-newest-comments .aside-list')
$dom.innerHTML = "无法获取评论,请确认相关配置是否正确"

View File

@ -169,11 +169,8 @@
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.js"></script>
<link rel="stylesheet" href="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.css">
<!-- 关于地图-->
<script src="https://map.qq.com/api/gljs?v=1.exp&key=YZOBZ-34HLF-K3OJV-JV6IN-OALJ5-7MBAC"></script>
<!-- 关于统计-->
<script th:src="${assets_link + '/libs/countup/countup.js'}"></script>
<script th:if="${#strings.contains(theme.config.about.widgets,'statistics-map')}" th:src="${assets_link + '/libs/countup/countup.js'}"></script>
<!-- 小板报 -->
<th:block th:if="${not #strings.isEmpty(theme.config.sidebar.welcome.key)}">
@ -187,135 +184,7 @@
<!-- icon图标 -->
<link rel="stylesheet" th:href="'https://cdn.cbd.int/hao-theme-static@'+${theme.spec.version}+'/icon/iconfont.css'">
<!-- 声明一些公共信息 -->
<script id="site-config" th:inline="javascript">
var GLOBAL_CONFIG = {
// 页面类型 index,page,post,tag,category
htmlType: [[${ htmlType }]],
postTitle: [[${ htmlType == 'post' ? post.spec.title : htmlType == 'page' ? singlePage.spec.title : ''}]],
isPost: [[${htmlType == 'post'}]],
isHome: [[${ htmlType == 'index'}]],
copyright: undefined,
lightbox: 'fancybox',
lazyload: {enable: [[${theme.config.other.vanillaLazyload.enable}]], error: [[@{${theme.config.other.vanillaLazyload.errorImg}}]] },
isFriendLinksInFooter: [[${theme.config.footer.footer_group.enable_footer_group}]],
loadingBox: [[${theme.config.other.loadingBoxs.loadingBoxEnable}]],
loadProgressBar: [[${theme.config.other.loadingBoxs.loadProgressBar}]],
navMusicEnable:[[${theme.config.tool.nav_music.nav_musicEnable}]],
isMusic: [[${ htmlType == 'music'}]],
helloText: [[${#strings.listSplit(theme.config.sidebar.profile.helloText, ',')}]],
profileStyle: [[${theme.config.sidebar.profile.profileStyle}]],
rightMenuEnable: [[${theme.config.tool.rightMenu.rightMenuEnable}]],
source: {
links: {
linksUrl: [[${ theme.config.link.linksUrl }]],
linksNum: [[${theme.config.footer.footer_group.num}]],
},
jQuery: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js',
justifiedGallery: {
js: 'https://npm.elemecdn.com/flickr-justified-gallery@2.1.2/dist/fjGallery.min.js',
css: 'https://npm.elemecdn.com/flickr-justified-gallery@2.1.2/dist/fjGallery.css'
},
fancybox: {
js: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.js',
css: 'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.css'
},
comments:{
use: [[${theme.config.comments.use}]],
maxBarrage: [[${ theme.config.comments.commentBarrageConfig.maxBarrage }]],
barrageTime: [[${ theme.config.comments.commentBarrageConfig.barrageTime }]],
mailMd5: "[(${theme.config.comments.commentBarrageConfig.mailMd5})]",
lazyload: [[${theme.config.comments.lazyload}]],
textarea: [[${ theme.config.comments.use == 'Twikoo' ? 'el-textarea__inner' :
theme.config.comments.use == 'Artalk' ? 'atk-textarea' :
theme.config.comments.use == 'Waline' ? 'wl-editor' : 'appearance-none' }]]
},
twikoo:{
js:[[${not #strings.isEmpty(theme.config.comments.twikoos.js) ? theme.config.comments.twikoos.js : assets_link +'/libs/twikoo/twikoo.all.min.js' }]],
twikooUrl: "[(${theme.config.comments.twikoos.envId})]",
accessToken: "[(${theme.config.comments.twikoos.accessToken})]",
},
artalk:{
js:[[${not #strings.isEmpty(theme.config.comments.artalks.artalkJs) ? theme.config.comments.artalks.artalkJs : assets_link +'/libs/artalk/Artalk.js' }]],
css:[[${not #strings.isEmpty(theme.config.comments.artalks.artalkCss) ? theme.config.comments.artalks.artalkCss : assets_link +'/libs/artalk/Artalk.css' }]],
artalkUrl: "[(${theme.config.comments.artalks.server})]",
siteName: "[(${theme.config.comments.artalks.siteName})]",
},
waline:{
js:[[${not #strings.isEmpty(theme.config.comments.walines.walinesJs) ? theme.config.comments.walines.walinesJs : 'https://cdn.cbd.int/@waline/client@2.15.7/dist/waline.js' }]],
serverURL: "[(${theme.config.comments.walines.serverURL})]",
},
welcome:{
key:"[(${theme.config.sidebar.welcome.key})]",
locationLng: [[${theme.config.sidebar.welcome.locationLng}]],
locationLat: [[${theme.config.sidebar.welcome.locationLat}]],
},
post:{
dynamicBackground: [[${ theme.config.post.dynamicBackground }]]
},
tool:{
switch: [[${ theme.config.tool.snackbar.switch }]]
},
postAi:{
ai : [[${htmlType != 'post' || !theme.config.post.aiDescription.aiDescriptionEnable ? '' :
theme.config.post.aiDescription.mode != 'local' && !theme.config.post.aiDescription.switchBtn ? '' :
post.spec.excerpt.autoGenerate ? '本地模式需要自己填写文章摘要' :
#strings.isEmpty(post.status.excerpt) ? '请填写文章摘要' : post.status.excerpt }]],
randomNum : [[${theme.config.post.aiDescription.randomNum}]],
basicWordCount : [[${theme.config.post.aiDescription.basicWordCount}]],
btnLink : "[(${theme.config.post.aiDescription.btnLink})]",
gptName : "[(${theme.config.post.aiDescription.gptName})]",
modeName : [[${theme.config.post.aiDescription.mode}]],
switchBtn : [[${theme.config.post.aiDescription.switchBtn}]],
keys : "[(${theme.config.post.aiDescription.key})]",
Referers : "[(${theme.config.post.aiDescription.Referer})]",
},
img:{
src: [[${isLazyload ? 'data-lazy-src' : 'src' }]]
}
},
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
Snackbar: {
chs_to_cht: "你已切换为繁体",
cht_to_chs: "你已切换为简体",
day_to_night: "你已切换为深色模式",
night_to_day: "你已切换为浅色模式",
bgLight: "[(${theme.config.style.themeLightSkin})]",
bgDark: "[(${theme.config.style.themeDarkSkin})]",
position: "top-center",
},
translate: {
defaultEncoding:[[${theme.config.style.translate.defaultEncoding}]],
translateDelay:0,
msgToTraditionalChinese:"繁",
msgToSimplifiedChinese:"简",
rightMenuMsgToTraditionalChinese:"轉為繁體",
rightMenuMsgToSimplifiedChinese:"转为简体"
},
prism: {
enable: [[${ theme.config.code.enable }]],
enable_title: [[${ theme.config.code.enable_title }]],
enable_hr: [[${ theme.config.code.enable_hr }]],
enable_line: [[${ theme.config.code.enable_line }]],
enable_copy: [[${ theme.config.code.enable_copy }]],
enable_expander: [[${ theme.config.code.enable_expander }]],
prism_limit: Number([[${#strings.isEmpty(theme.config.code.height_limit) ? 300 : theme.config.code.height_limit}]])+30,
enable_height_limit: [[${theme.config.code.enable_height_limit}]]
},
};
</script>
<th:block th:replace="~{modules/variables/site-config :: site-config}" />
</th:block>

View File

@ -22,26 +22,26 @@
th:src="${isLazyload ? loadingImg : img}">
</a>
</div>
<!-- 类别非空时 -->
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<span class="article-meta__categories">
<a class="article-meta__category"
th:each="category : ${post.categories}"
th:href="@{${category.status.permalink}}"
th:text="${category.spec.displayName}"
th:title="${category.spec.displayName}">
</a>
</span>
</th:block>
<div class="recent-post-info">
<div class="recent-post-info-top">
<span class="pinned-post" th:if="${post.spec.pinned}">置顶</span>
<div class="recent-post-info-top-tips">
<span class="sticky-warp sticky" th:if="${post.spec.pinned}">置顶</span></span>
<!-- 类别非空时 -->
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<span th:each="category : ${post.categories}" th:href="@{${category.status.permalink}}"
th:text="${category.spec.displayName}" th:title="${category.spec.displayName}"
class="original"></span>
</th:block>
<!-- <span class="lastestpost">最新</span>-->
<a class="unvisited-post" th:href="@{${post.status.permalink}}" th:title="${post.spec.title}"
data-pjax-state="">未读</a>
</div>
<a class="article-title"
th:attr="title=${post.spec.title}"
th:href="@{${post.status.permalink}}"
th:text="${post.spec.title}">
</a>
<div class="content" th:if="${theme.config.post.summarize}" th:text="${post.status.excerpt}"></div>
<div class="content" th:text="${post.status.excerpt}"></div>
</div>

View File

@ -78,11 +78,18 @@
</div>
<!-- 版权声明 -->
<div class="post-copyright" th:if="${theme.config.post.copyrights.enable}">
<div class="post-copyright__author">
<div class="post-copyright" th:with="copyrightUrl =${#annotations.get(post, 'copyrightUrl')},
copyrightEnable = ${#strings.equals(#annotations.getOrDefault(post, 'copyrightEnable','true'),'true')}">
<div class="post-copyright__author" >
<!-- 版权页 以及版权描述文字 -->
<a class="post-copyright__original" th:href="@{${theme.config.basics.copyrightAgreement}}"
<a th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'original') && copyrightEnable}"
class="post-copyright__original" th:href="@{${not #strings.isEmpty(copyrightUrl) ? copyrightUrl :
not #strings.isEmpty(theme.config.post.copyrights.originalUrl) ? theme.config.post.copyrights.originalUrl : '#'}}"
title="该文章为原创文章,注意版权协议">原创</a>
<a th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'reprint') && copyrightEnable}"
class="post-copyright__original" th:href="@{${not #strings.isEmpty(copyrightUrl) ? copyrightUrl :
not #strings.isEmpty(theme.config.post.copyrights.originalUrl) ? theme.config.post.copyrights.reprintUrl : '#'}}"
title="该文章为转载文章,版权归原作者所有">转载</a>
<a class="post-copyright-title" href="#"><span th:text="${post.spec.title}"></span></a>
</div>
<div class="post-copyright__type">
@ -93,8 +100,11 @@
<i class="haofont hao-icon-paste"></i>
</button>
</div>
<div class="post-copyright__notice">
<span class="post-copyright-info" th:utext="${theme.config.post.copyrights.content}"></span>
<div class="post-copyright__notice" th:if="${copyrightEnable}">
<span class="post-copyright-info"
th:utext="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'reprint') ?
theme.config.post.copyrights.reprintContent : theme.config.post.copyrights.content}">
</span>
</div>
</div>

View File

@ -72,8 +72,12 @@
</div>
</div>
</div>
<div th:if="${theme.config.post.copyrights.enable}" class="post-copyright__notice">
<span class="post-copyright-info" th:utext="${theme.config.post.copyrights.content}"></span>
<div th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightEnable','true'),'true')}"
class="post-copyright__notice">
<span class="post-copyright-info"
th:utext="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'reprint') ?
theme.config.post.copyrights.reprintContent : theme.config.post.copyrights.content}">
</span>
</div>

View File

@ -0,0 +1,132 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<th:block th:fragment="site-config">
<!-- 声明一些公共信息 -->
<script id="site-config" th:inline="javascript">
var GLOBAL_CONFIG = {
// 页面类型 index,page,post,tag,category
htmlType: [[${ htmlType }]],
postTitle: [[${ htmlType == 'post' ? post.spec.title : htmlType == 'page' ? singlePage.spec.title : ''}]],
isPost: [[${htmlType == 'post'}]],
isHome: [[${ htmlType == 'index'}]],
copyright: undefined,
lightbox: 'fancybox',
lazyload: {enable: [[${theme.config.other.vanillaLazyload.enable}]], error: [[@{${theme.config.other.vanillaLazyload.errorImg}}]] },
isFriendLinksInFooter: [[${theme.config.footer.footer_group.enable_footer_group}]],
loadingBox: [[${theme.config.other.loadingBoxs.loadingBoxEnable}]],
loadProgressBar: [[${theme.config.other.loadingBoxs.loadProgressBar}]],
navMusicEnable:[[${theme.config.tool.nav_music.nav_musicEnable}]],
isMusic: [[${ htmlType == 'music'}]],
helloText: [[${#strings.listSplit(theme.config.sidebar.profile.helloText, ',')}]],
profileStyle: [[${theme.config.sidebar.profile.profileStyle}]],
rightMenuEnable: [[${theme.config.tool.rightMenu.rightMenuEnable}]],
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
Snackbar: {
chs_to_cht: "你已切换为繁体",
cht_to_chs: "你已切换为简体",
day_to_night: "你已切换为深色模式",
night_to_day: "你已切换为浅色模式",
bgLight: "[(${theme.config.style.themeLightSkin})]",
bgDark: "[(${theme.config.style.themeDarkSkin})]",
position: "top-center",
},
translate: {
defaultEncoding:[[${theme.config.style.translate.defaultEncoding}]],
translateDelay:0,
msgToTraditionalChinese:"繁",
msgToSimplifiedChinese:"简",
rightMenuMsgToTraditionalChinese:"轉為繁體",
rightMenuMsgToSimplifiedChinese:"转为简体"
},
prism: {
enable: [[${ theme.config.code.enable }]],
enable_title: [[${ theme.config.code.enable_title }]],
enable_hr: [[${ theme.config.code.enable_hr }]],
enable_line: [[${ theme.config.code.enable_line }]],
enable_copy: [[${ theme.config.code.enable_copy }]],
enable_expander: [[${ theme.config.code.enable_expander }]],
prism_limit: Number([[${#strings.isEmpty(theme.config.code.height_limit) ? 300 : theme.config.code.height_limit}]])+30,
enable_height_limit: [[${theme.config.code.enable_height_limit}]]
},
source: {
links: {
linksUrl: [[${ theme.config.link.linksUrl }]],
linksNum: [[${theme.config.footer.footer_group.num}]],
},
jQuery: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js',
justifiedGallery: {
js: 'https://npm.elemecdn.com/flickr-justified-gallery@2.1.2/dist/fjGallery.min.js',
css: 'https://npm.elemecdn.com/flickr-justified-gallery@2.1.2/dist/fjGallery.css'
},
fancybox: {
js: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.js',
css: 'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/fancybox/3.5.7/jquery.fancybox.min.css'
},
comments:{
use: [[${theme.config.comments.use}]],
maxBarrage: [[${ theme.config.comments.commentBarrageConfig.maxBarrage }]],
barrageTime: [[${ theme.config.comments.commentBarrageConfig.barrageTime }]],
mailMd5: "[(${theme.config.comments.commentBarrageConfig.mailMd5})]",
lazyload: [[${theme.config.comments.lazyload}]],
textarea: [[${ theme.config.comments.use == 'Twikoo' ? 'el-textarea__inner' :
theme.config.comments.use == 'Artalk' ? 'atk-textarea' :
theme.config.comments.use == 'Waline' ? 'wl-editor' : 'appearance-none' }]]
},
welcome:{
key:"[(${theme.config.sidebar.welcome.key})]",
locationLng: [[${theme.config.sidebar.welcome.locationLng}]],
locationLat: [[${theme.config.sidebar.welcome.locationLat}]]
},
post:{
dynamicBackground: [[${ theme.config.post.dynamicBackground }]]
},
tool:{
switch: [[${ theme.config.tool.snackbar.switch }]]
},
postAi:{
ai : [[${htmlType != 'post' || !theme.config.post.aiDescription.aiDescriptionEnable ? '' :
theme.config.post.aiDescription.mode != 'local' && !theme.config.post.aiDescription.switchBtn ? '' :
post.spec.excerpt.autoGenerate ? '本地模式需要自己填写文章摘要' :
#strings.isEmpty(post.status.excerpt) ? '请填写文章摘要' : post.status.excerpt }]],
randomNum : [[${theme.config.post.aiDescription.randomNum}]],
basicWordCount : [[${theme.config.post.aiDescription.basicWordCount}]],
btnLink : "[(${theme.config.post.aiDescription.btnLink})]",
gptName : "[(${theme.config.post.aiDescription.gptName})]",
modeName : [[${theme.config.post.aiDescription.mode}]],
switchBtn : [[${theme.config.post.aiDescription.switchBtn}]],
keys : "[(${theme.config.post.aiDescription.key})]",
Referers : "[(${theme.config.post.aiDescription.Referer})]",
},
img:{
src: [[${isLazyload ? 'data-lazy-src' : 'src' }]]
},
twikoo:{
js:[[${not #strings.isEmpty(theme.config.comments.twikoos.js) ? theme.config.comments.twikoos.js : assets_link +'/libs/twikoo/twikoo.all.min.js' }]],
twikooUrl: "[(${theme.config.comments.twikoos.envId})]",
accessToken: "[(${theme.config.comments.twikoos.accessToken})]",
},
artalk:{
js:[[${not #strings.isEmpty(theme.config.comments.artalks.artalkJs) ? theme.config.comments.artalks.artalkJs : assets_link +'/libs/artalk/Artalk.js' }]],
css:[[${not #strings.isEmpty(theme.config.comments.artalks.artalkCss) ? theme.config.comments.artalks.artalkCss : assets_link +'/libs/artalk/Artalk.css' }]],
artalkUrl: "[(${theme.config.comments.artalks.server})]",
siteName: "[(${theme.config.comments.artalks.siteName})]",
},
waline:{
js:[[${not #strings.isEmpty(theme.config.comments.walines.walinesJs) ? theme.config.comments.walines.walinesJs : 'https://cdn.cbd.int/@waline/client@2.15.7/dist/waline.js' }]],
serverURL: "[(${theme.config.comments.walines.serverURL})]",
locale: [(${not #strings.isEmpty(theme.config.comments.walines.locale) ? theme.config.comments.walines.locale : {} })]
},
},
};
</script>
</th:block>
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!-- 我的介绍&我的想法 -->
<!-- hello -->
<div class="hello-about" th:fragment="hello-about">
<div class="cursor" style="translate: none; rotate: none; scale: none; transform: translate(721px,180px);"></div>
<div class="shapes">
@ -17,7 +17,6 @@
<div class="content">
<h1>[[${theme.config.about.helloAbout}]]</h1>
</div>
<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js"></script>
<style>
.hello-about {
margin: 20px auto 0;
@ -133,8 +132,8 @@
background: #2128bd;
}
</style>
<script>
(() => {
<script defer>
function initHelloAbout() {
const helloAboutEl = document.querySelector(".hello-about");
helloAboutEl.addEventListener("mousemove", evt => {
const mouseX = evt.offsetX;
@ -150,7 +149,12 @@
stagger: -0.1,
});
});
})();
}
if (typeof gsap === "object") {
initHelloAbout()
} else {
getScript("https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/gsap/3.9.1/gsap.min.js").then(initHelloAbout);
}
</script>
</div>

View File

@ -18,8 +18,7 @@
<div class="author-content-item-group column mapAndInfo">
<div class="author-content-item map single" style="padding: 0;">
<div id="mapContainer" style="height: 100%;"></div>
<div class="author-content-item map single">
<span class="map-title">我现在住在
<b>[[${theme.config.about.map.StrengthenTitle}]]</b></span>
</div>
@ -45,7 +44,7 @@
</div>
<style>
.author-content-item.map {
background: none !important;
background: url([[${theme.config.about.map.background}]]) no-repeat center;
min-height: 160px;
max-height: 400px;
position: relative;
@ -57,107 +56,118 @@
}
[data-theme=dark] .author-content-item.map {
background: none !important;
background: url([[${theme.config.about.map.backgroundDark}]]) no-repeat center;
background-size: 100%;
}
.author-content-item.map:hover {
background-size: 120%;
transition: 4s ease-in-out;
background-position-x: 0;
background-position-y: 36%;
}
.author-content-item.map .map-title {
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
background: var(--heo-maskbg);
padding: 0.5rem 2rem;
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: blur(20px);
transition: 1s ease-in-out;
font-size: 20px;
}
.author-content-item.map:hover .map-title {
bottom: -100%;
}
.author-content-item.map .map-title b {
color: var(--heo-fontcolor);
}
@media screen and (max-width: 768px) {
.author-content-item.map.myphoto {
background-size: cover !important;
}
.author-content-item.map .map-title {
padding: 1rem;
}
}
</style>
<script>
// 链接替换即可,不需要后面的参数
fetch("https://v6-widget.51.la/v6/[[${theme.config.about.LingQueMonitorID}]]/quote.js")
.then(res => res.text())
.then(data => {
let title = ["最近活跃", "今日人数", "今日访问", "昨日人数", "昨日访问", "本月访问", "总访问量"];
// let num = data.match(/(?<=<\/span><span>).*?(?=<\/span><\/p>)/g)
let num = data.match(/(<\/span><span>).*?(\/span><\/p>)/g);
num = num.map(el => {
let val = el.replace(/(<\/span><span>)/g, "");
let str = val.replace(/(<\/span><\/p>)/g, "");
return str;
});
let statisticEl = document.getElementById("statistic");
// 自定义不显示哪个或者显示哪个,如下为不显示 最近活跃访客 和 总访问量
let statistic = [];
for (let i = 0; i < num.length; i++) {
if (!statisticEl) return;
if (i == 0) continue;
statisticEl.innerHTML +=
"<div><span>" + title[i] + "</span><span id=" + title[i] + ">" + num[i] + "</span></div>";
queueMicrotask(() => {
statistic.push(
new CountUp(title[i], 0, num[i], 0, 2, {
useEasing: true,
useGrouping: true,
separator: ",",
decimal: ".",
prefix: "",
suffix: "",
})
);
});
}
let statisticElement = document.querySelector(".about-statistic.author-content-item");
function statisticUP() {
if (!statisticElement) return;
const callback = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
for (let i = 0; i < num.length; i++) {
if (i == 0) continue;
queueMicrotask(() => {
statistic[i - 1].start();
});
}
observer.disconnect(); // 停止观察元素,因为不再需要触发此回调
}
});
};
const options = {
root: null,
rootMargin: "0px",
threshold: 0
};
const observer = new IntersectionObserver(callback, options);
observer.observe(statisticElement);
}
statisticUP()
});
</script>
<!-- 关于统计-->
<script defer>
var t = new TMap.LatLng([[${ theme.config.about.map.mapLocation }]])
, n = new TMap.Map(document.getElementById("mapContainer"), {
center: t,
zoom: 12,
});
n.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM),
n.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION),
n.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE),
new TMap.MultiMarker({
map: n,
styles: {
marker: new TMap.MarkerStyle({
width: 20,
height: 30,
anchor: {
x: 10,
y: 30
}
})
},
geometries: [{
id: "marker",
position: t
}]
})
// 链接替换即可,不需要后面的参数
function initAboutPage() {
fetch("https://v6-widget.51.la/v6/[[${theme.config.about.LingQueMonitorID}]]/quote.js")
.then(res => res.text())
.then(data => {
let title = ["最近活跃", "今日人数", "今日访问", "昨日人数", "昨日访问", "本月访问", "总访问量"];
// let num = data.match(/(?<=<\/span><span>).*?(?=<\/span><\/p>)/g)
let num = data.match(/(<\/span><span>).*?(\/span><\/p>)/g);
num = num.map(el => {
let val = el.replace(/(<\/span><span>)/g, "");
let str = val.replace(/(<\/span><\/p>)/g, "");
return str;
});
let statisticEl = document.getElementById("statistic");
// 自定义不显示哪个或者显示哪个,如下为不显示 最近活跃访客 和 总访问量
let statistic = [];
for (let i = 0; i < num.length; i++) {
if (!statisticEl) return;
if (i == 0) continue;
statisticEl.innerHTML +=
"<div><span>" + title[i] + "</span><span id=" + title[i] + ">" + num[i] + "</span></div>";
queueMicrotask(() => {
statistic.push(
new CountUp(title[i], 0, num[i], 0, 2, {
useEasing: true,
useGrouping: true,
separator: ",",
decimal: ".",
prefix: "",
suffix: "",
})
);
});
}
let statisticElement = document.querySelector(".about-statistic.author-content-item");
function statisticUP() {
if (!statisticElement) return;
const callback = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
for (let i = 0; i < num.length; i++) {
if (i == 0) continue;
queueMicrotask(() => {
statistic[i - 1].start();
});
}
observer.disconnect(); // 停止观察元素,因为不再需要触发此回调
}
});
};
const options = {
root: null,
rootMargin: "0px",
threshold: 0
};
const observer = new IntersectionObserver(callback, options);
observer.observe(statisticElement);
}
statisticUP()
});
}
initAboutPage();
// 去除logo及水印
var a = document.querySelector('canvas+div:last-child')
a.style.display = 'none'
</script>
</div>

View File

@ -15,12 +15,22 @@
<th:block th:each="group : ${photoFinder.groupBy()}">
<th:block th:if="${#strings.equals(group.metadata.name, param.photo_group_name)}" th:with="description = ${#annotations.get(group, 'description')},
background = ${#annotations.get(group, 'background')}">
<th:div th:replace="~{macro/author-content :: author-content(background = ${background},
smallTitle = '相册集',
bigTitle = ${group.spec.displayName},
detail = ${description},
buttonUrl = '',
buttonTitle = '')}" />
<div class="author-content author-content-item essayPage single"
th:style="'background:url('+${background}+') left 28% / cover no-repeat !important;'">
<div class="card-content">
<div class="author-content-item-tips" text="相册集"></div>
<span class="author-content-item-title" th:text="${group.spec.displayName}"></span>
<div class="content-bottom">
<div class="tips" th:text="${description}"></div>
</div>
<div class="banner-button-group">
<a class="banner-button" target="_blank" th:attr="onclick='pjax.loadUrl(\''+ ${theme.config.photos.topLink} +'\')'">
<i class="haofont hao-icon-circle-arrow-right"></i>
<span class="banner-button-text" th:text="返回"></span>
</a>
</div>
</div>
</div>
</th:block>
</th:block>
<div id="article-container">

View File

@ -16,7 +16,21 @@
<div id="post-firstinfo">
<div class="meta-firstline">
<!-- 这里要跳转到版权页 -->
<!--<a class="post-meta-original" th:href="@{/cc}" title="该文章为原创文章,注意版权协议">原创</a>-->
<th:block th:with="copyrightUrl =${#annotations.get(post, 'copyrightUrl')}"
th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightEnable','true'),'true')}">
<a class="post-meta-original"
title="该文章为原创文章,注意版权协议"
th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'original')}"
th:href="@{${not #strings.isEmpty(copyrightUrl) ? copyrightUrl :
not #strings.isEmpty(theme.config.post.copyrights.originalUrl) ? theme.config.post.copyrights.originalUrl : '#'}}"
>原创</a>
<a class="post-meta-original"
title="该文章为转载文章,版权归原作者所有"
th:if="${#strings.equals(#annotations.getOrDefault(post, 'copyrightType','original'),'reprint')}"
th:href="@{${not #strings.isEmpty(copyrightUrl) ? copyrightUrl :
not #strings.isEmpty(theme.config.post.copyrights.originalUrl) ? theme.config.post.copyrights.reprintUrl : '#'}}"
>转载</a>
</th:block>
<span class="post-meta-categories" th:each="category : ${post.categories}"
th:if="${not #lists.isEmpty(post.categories)}">
<a class="post-meta-categories" th:href="@{${category.status.permalink}}"

View File

@ -47,5 +47,5 @@ spec:
repo: https://github.com/liuzhihang/halo-theme-hao
settingName: "theme-hao-setting"
configMapName: "theme-hao-configMap"
version: "1.3.8"
version: "1.3.9"
require: ">=2.8.0"