Compare commits
54 Commits
Author | SHA1 | Date |
---|---|---|
zhengyi | 12e4e1720c | |
zhengyi | e27b9f65d7 | |
zhengyi | 9e0098984b | |
Jevon | 7fe560649f | |
jiewenhuang | c5f3ba7ffa | |
Jevon | 00b4e8666c | |
jiewenhuang | 0f677c78bb | |
Jevon | d1f0a2b9cd | |
jiewenhuang | 5a065dda7f | |
jiewenhuang | 0008c1b23a | |
jiewenhuang | 34f45f71a6 | |
jiewenhuang | e1ec45f793 | |
jiewenhuang | 8a0de51878 | |
jiewenhuang | e07d58b48c | |
jiewenhuang | 3e7fbb9241 | |
jiewenhuang | 8caf395e81 | |
jiewenhuang | 60db56bfa4 | |
jiewenhuang | 936eb4705d | |
jiewenhuang | 04ca092c35 | |
jiewenhuang | 678f732927 | |
Jevon | 495b0d125e | |
yundabei | 37f7436c2c | |
yundabei | 27b4387db7 | |
yundabei | 75ba9dc223 | |
yundabei | 07f0e3f949 | |
DAB | d58f6219c9 | |
yundabei | 856a07cc90 | |
Jevon | fb66e2384c | |
Jevon | d0c7fc9e5a | |
Jevon | c968bc9d9f | |
yundabei | 93cd06a3ce | |
yundabei | e248a90138 | |
yundabei | fb19fd98d9 | |
yundabei | 1182b5b674 | |
yundabei | 865b076855 | |
yundabei | 9152e903c8 | |
yundabei | ac5dacca8f | |
yundabei | c4b59aba10 | |
yundabei | aa499207b9 | |
zhengyi | 143873d3c0 | |
zhengyi | 524550b8cb | |
zhengyi | e676e20af9 | |
zhengyi | 6100f19b8c | |
zhengyi | 7c4393d44a | |
Jevon | 7832547500 | |
Jevon | 358cb28f43 | |
Jevon | 40629b2cdc | |
zhengyi | 226dd783ac | |
zhengyi | df65eb521d | |
zhengyi | 12ccbf5b5a | |
jiewenhuang | 8667dc3671 | |
Jevon | e8dc93b81b | |
Jevon | 4e673476d0 | |
Jevon | b3f9b51bd1 |
|
@ -0,0 +1,50 @@
|
|||
name: Bug 反馈
|
||||
description: 提交 Bug 反馈
|
||||
labels: [ bug ]
|
||||
body:
|
||||
- type: markdown
|
||||
id: preface
|
||||
attributes:
|
||||
value: |
|
||||
感谢你花时间填写此错误报告!在开始之前,我们非常推荐阅读一遍[《开源最佳实践》](https://github.com/LinuxSuRen/open-source-best-practice),这会在很大程度上提高我们彼此的效率。
|
||||
- type: markdown
|
||||
id: environment
|
||||
attributes:
|
||||
value: "## 环境信息"
|
||||
- type: input
|
||||
id: version
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: "是什么版本出现了此问题?"
|
||||
description: "可以在管理后台的关于页面中找到。"
|
||||
- type: input
|
||||
id: site-url
|
||||
attributes:
|
||||
label: "在线站点地址"
|
||||
description: "如果可以的话,请提供你的站点地址。这可能会帮助我们更好的定位问题。"
|
||||
placeholder: "ex. https://halo.run"
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
id: details
|
||||
attributes:
|
||||
value: "## 详细信息"
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: "发生了什么?"
|
||||
description: "最好还告诉我们,你预计会发生什么。"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: "相关日志输出"
|
||||
description: "请复制并粘贴任何相关的日志输出。 这将自动格式化为代码,因此无需反引号。"
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: additional-information
|
||||
attributes:
|
||||
label: "附加信息"
|
||||
description: "如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。"
|
|
@ -0,0 +1,5 @@
|
|||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: 对 Joe3 有其他问题
|
||||
url: xxxxxx
|
||||
about: 如果你还有其他疑问,可以加群沟通。
|
|
@ -0,0 +1,31 @@
|
|||
name: 新特性建议
|
||||
description: 提交新特性建议
|
||||
body:
|
||||
- type: markdown
|
||||
id: preface
|
||||
attributes:
|
||||
value: "你好!在开始之前,我们非常推荐阅读一遍[《开源最佳实践》](https://github.com/LinuxSuRen/open-source-best-practice),这会在很大程度上提高我们彼此的效率。"
|
||||
- type: markdown
|
||||
id: environment
|
||||
attributes:
|
||||
value: "## 环境信息"
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: "你当前使用的版本"
|
||||
description: "可以在管理后台的关于页面中找到。"
|
||||
- type: markdown
|
||||
id: details
|
||||
attributes:
|
||||
value: "## 详细信息"
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: "描述一下此特性"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-information
|
||||
attributes:
|
||||
label: "附加信息"
|
||||
description: "如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。"
|
|
@ -0,0 +1,90 @@
|
|||
name: Build distribution theme
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: debian-12
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
- name: Compress zip
|
||||
run: |
|
||||
PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json)
|
||||
PRE_ZIP_FOLDER=halo-theme-Joe3-${PACKAGE_VERSION}
|
||||
ARTIFACT_NAME=${PRE_ZIP_FOLDER}.zip
|
||||
ARTIFACT_PATHNAME=dist/${ARTIFACT_NAME}
|
||||
echo "halo-theme-Joe3 version $PACKAGE_VERSION"
|
||||
echo "Artifact name: ${ARTIFACT_NAME}"
|
||||
echo "Artifact pathname: ${ARTIFACT_PATHNAME}"
|
||||
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
|
||||
echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV
|
||||
mkdir $PRE_ZIP_FOLDER
|
||||
mkdir dist
|
||||
cp -r theme.yaml settings.yaml annotation-setting.yaml templates $PRE_ZIP_FOLDER/
|
||||
zip -r $ARTIFACT_PATHNAME $PRE_ZIP_FOLDER
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: halo-theme-Joe3
|
||||
path: |
|
||||
dist/*.zip
|
||||
retention-days: 7
|
||||
|
||||
github-release:
|
||||
runs-on: debian-12
|
||||
if: github.event_name == 'release'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: false
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
- name: Compress zip
|
||||
run: |
|
||||
PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json)
|
||||
PRE_ZIP_FOLDER=halo-theme-Joe3-${PACKAGE_VERSION}
|
||||
ARTIFACT_NAME=${PRE_ZIP_FOLDER}.zip
|
||||
ARTIFACT_PATHNAME=dist/${ARTIFACT_NAME}
|
||||
echo "halo-theme-Joe3 version $PACKAGE_VERSION"
|
||||
echo "Artifact name: ${ARTIFACT_NAME}"
|
||||
echo "Artifact pathname: ${ARTIFACT_PATHNAME}"
|
||||
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
|
||||
echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV
|
||||
mkdir $PRE_ZIP_FOLDER
|
||||
mkdir dist
|
||||
cp -r theme.yaml settings.yaml annotation-setting.yaml templates $PRE_ZIP_FOLDER/
|
||||
zip -r $ARTIFACT_PATHNAME $PRE_ZIP_FOLDER
|
||||
- name: Upload a release asset
|
||||
uses: actions/github-script@v2
|
||||
with:
|
||||
github-token: ${{secrets.TOKEN}}
|
||||
script: |
|
||||
const fs = require('fs').promises;
|
||||
const { repo: { owner, repo }, sha } = context;
|
||||
console.log({ owner, repo, sha });
|
||||
const releaseId = process.env.RELEASE_ID
|
||||
const artifactPathName = process.env.ARTIFACT_PATHNAME
|
||||
const artifactName = process.env.ARTIFACT_NAME
|
||||
console.log('Releasing', releaseId, artifactPathName, artifactName)
|
||||
await github.repos.uploadReleaseAsset({
|
||||
owner, repo,
|
||||
release_id: releaseId,
|
||||
name: artifactName,
|
||||
data: await fs.readFile(artifactPathName)
|
||||
});
|
|
@ -1,5 +1,9 @@
|
|||
|
||||
<h1 align="center"> Halo Theme Joe3 </h1>
|
||||
> 🚧 [上游](https://github.com/jiewenhuang/halo-theme-joe3.0),定期从上游合并分支
|
||||
|
||||
<h1 align="center"> Halo Theme Joe3 ZBlog </h1>
|
||||
|
||||
Joe3 ZBlog专版
|
||||
|
||||
<p class="badge-row" align="center">
|
||||
<a href="https://halo.run" target="_blank">
|
||||
|
|
468
settings.yaml
468
settings.yaml
|
@ -32,12 +32,38 @@ spec:
|
|||
label: 默认
|
||||
- value: waline
|
||||
label: Waline
|
||||
- $formkit: text
|
||||
- $formkit: group
|
||||
name: waline
|
||||
if: "$get(comment_option).value === 'waline'"
|
||||
name: waline_serverURL
|
||||
label: Waline 服务端地址
|
||||
value: ""
|
||||
help: "Waline 服务端地址,如 https://waline-server.herokuapp.com 不要加结尾反斜杠"
|
||||
label: Waline 设置
|
||||
id: waline
|
||||
children:
|
||||
- $formkit: text
|
||||
name: waline_serverURL
|
||||
label: Waline 服务端地址
|
||||
value: ""
|
||||
help: "Waline 服务端地址,如 https://waline-server.herokuapp.com 不要加结尾反斜杠"
|
||||
- $formkit: text
|
||||
name: waline_css
|
||||
label: Waline CSS地址
|
||||
value: "https://unpkg.com/@waline/client@v2/dist/waline.css"
|
||||
help: Waline 的主样式地址
|
||||
- $formkit: text
|
||||
name: waline_js_comment
|
||||
label: 用于评论的 JS 地址
|
||||
value: "https://unpkg.com/@waline/client@v2/dist/waline.mjs"
|
||||
help: Waline 的评论 JS 地址
|
||||
- $formkit: text
|
||||
name: waline_js_leaving
|
||||
label: 功能 JS
|
||||
value: "https://cdn.jsdelivr.net/npm/@waline/client/dist/waline.mjs"
|
||||
help: 用于加载留言板和最新评论的 JS 地址
|
||||
- $formkit: text
|
||||
name: waline_js_list
|
||||
label: 列表 JS
|
||||
value: "https://unpkg.com/@waline/client@v2/dist/comment.mjs"
|
||||
help: 首页加载显示评论数的 JS 地址
|
||||
|
||||
- $formkit: radio
|
||||
name: enable_source_link
|
||||
id: enable_source_link
|
||||
|
@ -604,15 +630,54 @@ spec:
|
|||
- value: false
|
||||
label: 关闭
|
||||
- $formkit: repeater
|
||||
if: "$get(enable_banner).value"
|
||||
name: banner_source
|
||||
label: 轮播图文章
|
||||
value: [ ]
|
||||
if: "$get(enable_banner).value === true"
|
||||
name: banner_data_group
|
||||
label: 轮播图数据设置
|
||||
id: banner_data_group
|
||||
value: []
|
||||
children:
|
||||
- $formkit: radio
|
||||
name: banner_section_type
|
||||
id: banner_section_type
|
||||
label: 模块类型
|
||||
value:
|
||||
options:
|
||||
- label: 已有文章
|
||||
value: post
|
||||
- label: 自定义数据
|
||||
value: custom
|
||||
- $formkit: postSelect
|
||||
name: posts
|
||||
label: 选择要推荐的文章(至少两个)
|
||||
if: $value.banner_section_type === 'post'
|
||||
name: data_by_post
|
||||
label: 选择已有文章
|
||||
id: data_by_post
|
||||
value: ""
|
||||
- $formkit: group
|
||||
if: $value.banner_section_type === 'custom'
|
||||
name: data_by_custom
|
||||
label: 自定义数据
|
||||
id: data_by_custom
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: text
|
||||
name: banner_title
|
||||
label: 标题
|
||||
value: ""
|
||||
validation: "required"
|
||||
- $formkit: textarea
|
||||
name: banner_subtitle
|
||||
label: 描述(可留空)
|
||||
value: ""
|
||||
- $formkit: url
|
||||
name: banner_url
|
||||
label: 跳转链接
|
||||
value: ""
|
||||
validation: "required"
|
||||
- $formkit: attachment
|
||||
name: banner_img
|
||||
label: 图片地址
|
||||
value: ""
|
||||
validation: "required"
|
||||
- $formkit: radio
|
||||
name: banner_direction
|
||||
id: banner_direction
|
||||
|
@ -1486,14 +1551,16 @@ spec:
|
|||
name: template_aside
|
||||
id: template_aside
|
||||
label: "侧边栏模块"
|
||||
value: "enable_lifetime"
|
||||
value: "none"
|
||||
options:
|
||||
- value: "none"
|
||||
label: 无
|
||||
- value: "enable_blogger"
|
||||
label: 博主信息
|
||||
- value: "enable_notice"
|
||||
label: 网站公告
|
||||
- value: "enable_qrcode"
|
||||
label: 二维码
|
||||
- value: "enable_picture"
|
||||
label: 图片
|
||||
- value: "enable_music_player"
|
||||
label: 音乐播放器
|
||||
- value: "enable_newest_post"
|
||||
|
@ -1506,63 +1573,128 @@ spec:
|
|||
label: 标签云
|
||||
- value: "enable_ads_aside"
|
||||
label: 侧边栏广告
|
||||
- $formkit: code
|
||||
# if: "$get(template_aside).value === 'enable_notice'"
|
||||
name: site_notice
|
||||
label: 网站公告
|
||||
value: "这是你的公告"
|
||||
help: "网站公告信息,将展示在页面右侧,尽量简洁明了,不填不展示该模块(需要先在 “侧边栏” 中开启公告模块),支持html代码"
|
||||
language: html
|
||||
- $formkit: attachment
|
||||
# if: "$get(template_aside).value === 'enable_qrcode'"
|
||||
name: qrcode_url
|
||||
label: 二维码图片
|
||||
value: ""
|
||||
- $formkit: text
|
||||
# if: "$get(enable_qrcode).value === true"
|
||||
name: qrcode_title
|
||||
label: 二维码标题
|
||||
value: "我的二维码"
|
||||
- $formkit: textarea
|
||||
# if: "$get(template_aside).value === 'enable_qrcode'"
|
||||
name: qrcode_description
|
||||
label: 二维码描述
|
||||
value: ""
|
||||
- $formkit: text
|
||||
# if: "$get(template_aside).value === 'enable_music_player'"
|
||||
name: music_id
|
||||
label: 歌单ID
|
||||
help: "为音乐播放器配置歌单ID,大家在网页歌单页直接复制地址栏id参数后面那串数字即可,不填或填错将不会展示播放器(注意:仅支持网易云歌单ID,且不支持私密歌单)"
|
||||
value: ""
|
||||
- $formkit: number
|
||||
# if: "$get(template_aside).value === 'show_newreply'"
|
||||
name: show_newreply_num
|
||||
label: 展示最新评论
|
||||
value: 3
|
||||
help: "在侧边栏展示最新评论的数量"
|
||||
- $formkit: select
|
||||
# if: "$get(template_aside).value === 'enable_tag_cloud'"
|
||||
name: tag_cloud_type
|
||||
id: tag_cloud_type
|
||||
label: 标签云类型
|
||||
value: "3d"
|
||||
help: "设置标签云的展示形式,默认为 “3D标签云”,标签太多或卡顿时建议限制展示的标签数量使用列表形式"
|
||||
options:
|
||||
- value: 3d
|
||||
label: 3D标签云
|
||||
- value: list
|
||||
label: 标签列表
|
||||
- $formkit: select
|
||||
# if: "$get(template_aside).value === 'enable_tag_cloud'"
|
||||
name: tag_cloud_width
|
||||
id: tag_cloud_width
|
||||
label: 标签宽度
|
||||
value: "static"
|
||||
options:
|
||||
- value: static
|
||||
label: 固定宽度
|
||||
- value: responsive
|
||||
label: 自适应宽度
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'enable_notice'
|
||||
name: aside_notice
|
||||
label: 网站公告
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: text
|
||||
name: notice_title
|
||||
label: 公告标题
|
||||
value: "网站公告"
|
||||
help: "公告标题,留空则不显示"
|
||||
- $formkit: code
|
||||
name: site_notice
|
||||
label: 网站公告内容
|
||||
value: "这是你的公告"
|
||||
help: "支持html代码"
|
||||
language: html
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'enable_picture'
|
||||
name: aside_picture
|
||||
label: 图片
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: qrcode_url
|
||||
label: 图片链接
|
||||
value: ""
|
||||
- $formkit: text
|
||||
name: qrcode_title
|
||||
label: 图片标题
|
||||
value: "我的二维码"
|
||||
- $formkit: textarea
|
||||
name: qrcode_description
|
||||
label: 图片描述
|
||||
value: ""
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'enable_music_player'
|
||||
name: aside_music_player
|
||||
label: 音乐播放器
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: text
|
||||
name: music_id
|
||||
label: 歌单ID
|
||||
help: "为音乐播放器配置歌单ID,大家在网页歌单页直接复制地址栏id参数后面那串数字即可,不填或填错将不会展示播放器(注意:仅支持网易云歌单ID,且不支持私密歌单)"
|
||||
value: ""
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'show_newreply'
|
||||
name: aside_newreply
|
||||
label: 最新评论
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: number
|
||||
name: show_newreply_num
|
||||
label: 展示最新评论
|
||||
value: 3
|
||||
help: "在侧边栏展示最新评论的数量"
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'enable_tag_cloud'
|
||||
name: aside_tag_cloud
|
||||
label: 标签云
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: select
|
||||
name: tag_cloud_type
|
||||
id: tag_cloud_type
|
||||
label: 标签云类型
|
||||
value: "3d"
|
||||
help: "设置标签云的展示形式,默认为 “3D标签云”,标签太多或卡顿时建议限制展示的标签数量使用列表形式"
|
||||
options:
|
||||
- value: 3d
|
||||
label: 3D标签云
|
||||
- value: list
|
||||
label: 标签列表
|
||||
- $formkit: select
|
||||
name: tag_cloud_width
|
||||
id: tag_cloud_width
|
||||
label: 标签宽度
|
||||
value: "static"
|
||||
options:
|
||||
- value: static
|
||||
label: 固定宽度
|
||||
- value: responsive
|
||||
label: 自适应宽度
|
||||
- $formkit: group
|
||||
if: $value.template_aside === 'enable_ads_aside'
|
||||
name: aside_ads
|
||||
label: 侧边栏广告
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: radio
|
||||
name: aside_ads_type
|
||||
id: aside_ads_type
|
||||
label: 广告数据
|
||||
value: ""
|
||||
help: "广告类型,支持图片和自定义代码"
|
||||
options:
|
||||
- value: img
|
||||
label: 图片
|
||||
- value: code
|
||||
label: 自定义代码
|
||||
- $formkit: attachment
|
||||
if: $value.aside_ads_type === 'img'
|
||||
name: aside_ads_img
|
||||
label: 侧边栏广告图片
|
||||
value: ""
|
||||
help: "侧边栏广告图片链接"
|
||||
- $formkit: text
|
||||
if: $value.aside_ads_type === 'img'
|
||||
name: aside_ads_url
|
||||
label: 广告链接
|
||||
value: ""
|
||||
help: "广告跳转链接"
|
||||
- $formkit: code
|
||||
if: $value.aside_ads_type === 'code'
|
||||
name: aside_ads_code
|
||||
label: 自定义代码
|
||||
value: ""
|
||||
help: "支持html代码"
|
||||
language: html
|
||||
|
||||
|
||||
#
|
||||
- group: post
|
||||
label: 文章页
|
||||
|
@ -1876,6 +2008,15 @@ spec:
|
|||
label: 微信二维码
|
||||
value: ""
|
||||
help: "打赏用的微信收款二维码链接,不填不显示"
|
||||
|
||||
|
||||
- $formkit: attachment
|
||||
# if: "$get(enable_donate).value === true"
|
||||
name: qrcode_qq
|
||||
label: QQ二维码
|
||||
value: ""
|
||||
help: "打赏用的QQ收款二维码链接,不填不显示"
|
||||
|
||||
- group: tags
|
||||
label: 标签页
|
||||
formSchema:
|
||||
|
@ -2226,83 +2367,116 @@ spec:
|
|||
- group: ads
|
||||
label: 广告
|
||||
formSchema:
|
||||
- $formkit: radio
|
||||
name: enable_aside_ads
|
||||
label: 是否启用侧边栏广告
|
||||
value: false
|
||||
help: "启用后需要再到侧边栏添加组件"
|
||||
- $formkit: select
|
||||
name: enable_ads_top
|
||||
id: enable_ads_top
|
||||
label: 启用文章顶部广告
|
||||
value: none
|
||||
options:
|
||||
- value: true
|
||||
label: 是
|
||||
- value: false
|
||||
label: 否
|
||||
- $formkit: attachment
|
||||
name: aside_ads_img
|
||||
label: 侧边栏广告图片
|
||||
value: ""
|
||||
help: "侧边栏广告图片链接"
|
||||
- $formkit: text
|
||||
name: aside_ads_url
|
||||
label: 广告链接
|
||||
value: ""
|
||||
help: "广告跳转链接"
|
||||
- $formkit: radio
|
||||
name: enable_post_ads_top
|
||||
label: 是否启用文章顶部广告
|
||||
value: false
|
||||
options:
|
||||
- value: true
|
||||
label: 是
|
||||
- value: false
|
||||
label: 否
|
||||
- $formkit: attachment
|
||||
name: post_ads_top_img
|
||||
- value: none
|
||||
label: 不启用
|
||||
- value: img
|
||||
label: 图片
|
||||
- value: code
|
||||
label: 自定义代码
|
||||
- $formkit: repeater
|
||||
name: ads_top
|
||||
label: 文章顶部广告图片
|
||||
value: ""
|
||||
help: "文章顶部广告图片链接"
|
||||
- $formkit: text
|
||||
name: post_ads_top_url
|
||||
label: 广告链接
|
||||
value: ""
|
||||
help: "广告跳转链接"
|
||||
- $formkit: radio
|
||||
name: enable_post_ads_bottom
|
||||
label: 是否启用文章底部广告
|
||||
value: false
|
||||
max: 1
|
||||
min: 1
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: ads_img
|
||||
id: ads_img
|
||||
label: 广告图片
|
||||
value:
|
||||
- $formkit: text
|
||||
name: ads_url
|
||||
id: ads_url
|
||||
label: 广告链接
|
||||
value:
|
||||
- $formkit: code
|
||||
name: ads_code
|
||||
id: ads_code
|
||||
label: 自定义代码
|
||||
value:
|
||||
language: html
|
||||
- $formkit: select
|
||||
name: enable_ads_bottom
|
||||
id: enable_ads_bottom
|
||||
label: 启用文章底部广告
|
||||
value: none
|
||||
options:
|
||||
- value: true
|
||||
label: 是
|
||||
- value: false
|
||||
label: 否
|
||||
- $formkit: attachment
|
||||
name: post_ads_bottom_img
|
||||
- value: none
|
||||
label: 不启用
|
||||
- value: img
|
||||
label: 图片
|
||||
- value: code
|
||||
label: 自定义代码
|
||||
- $formkit: repeater
|
||||
name: ads_bottom
|
||||
label: 文章底部广告图片
|
||||
value: ""
|
||||
help: "文章底部广告图片链接"
|
||||
- $formkit: text
|
||||
name: post_ads_bottom_url
|
||||
label: 广告链接
|
||||
value: ""
|
||||
help: "广告跳转链接"
|
||||
- $formkit: radio
|
||||
name: enable_post_ads_aside
|
||||
label: 是否启用文章侧边栏广告
|
||||
value: false
|
||||
max: 1
|
||||
min: 1
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: ads_img
|
||||
id: ads_img
|
||||
label: 广告图片
|
||||
value:
|
||||
- $formkit: text
|
||||
name: ads_url
|
||||
id: ads_url
|
||||
label: 广告链接
|
||||
value:
|
||||
- $formkit: code
|
||||
name: ads_code
|
||||
id: ads_code
|
||||
label: 自定义代码
|
||||
value:
|
||||
language: html
|
||||
- $formkit: select
|
||||
name: enable_ads_aside
|
||||
id: enable_ads_aside
|
||||
label: 启用文章侧边栏广告
|
||||
value: none
|
||||
options:
|
||||
- value: true
|
||||
label: 是
|
||||
- value: false
|
||||
label: 否
|
||||
- $formkit: attachment
|
||||
name: post_ads_aside_img
|
||||
- value: none
|
||||
label: 不启用
|
||||
- value: img
|
||||
label: 图片
|
||||
- value: code
|
||||
label: 自定义代码
|
||||
- $formkit: repeater
|
||||
name: ads_aside
|
||||
label: 文章侧边栏广告图片
|
||||
value: ""
|
||||
help: "文章底部广告图片链接"
|
||||
- $formkit: text
|
||||
name: post_ads_aside_url
|
||||
label: 广告链接
|
||||
value: ""
|
||||
help: "广告跳转链接"
|
||||
max: 1
|
||||
min: 1
|
||||
value: [ ]
|
||||
children:
|
||||
- $formkit: attachment
|
||||
name: ads_img
|
||||
id: ads_img
|
||||
label: 广告图片
|
||||
value:
|
||||
- $formkit: text
|
||||
name: ads_url
|
||||
id: ads_url
|
||||
label: 广告链接
|
||||
value:
|
||||
- $formkit: code
|
||||
name: ads_code
|
||||
id: ads_code
|
||||
label: 自定义代码
|
||||
value:
|
||||
language: html
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- group: footer
|
||||
label: 页脚
|
||||
|
@ -2392,6 +2566,7 @@ spec:
|
|||
label: 否
|
||||
- $formkit: select
|
||||
name: driven_by
|
||||
id: driven_by
|
||||
label: 云服务提供商
|
||||
value: "none"
|
||||
help: "配置本站点由xxx云提供云服务"
|
||||
|
@ -2414,6 +2589,15 @@ spec:
|
|||
label: 金山云
|
||||
- value: custom
|
||||
label: 自定义
|
||||
|
||||
- $formkit: text
|
||||
name: driven_by_custom_url
|
||||
if: "$get(driven_by).value === 'custom'"
|
||||
label: 跳转链接
|
||||
- $formkit: attachment
|
||||
name: driven_by_custom_img
|
||||
if: "$get(driven_by).value === 'custom'"
|
||||
label: 图片地址
|
||||
- $formkit: radio
|
||||
name: enable_rss
|
||||
label: 展示 RSS
|
||||
|
|
|
@ -499,6 +499,10 @@ body {
|
|||
visibility: visible;
|
||||
opacity: 1;
|
||||
transform: translateX(-50%) perspective(600px) rotateX(0);
|
||||
li{
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5670,6 +5674,7 @@ body {
|
|||
color: var(--minor);
|
||||
background: var(--background);
|
||||
border-top: 1px solid var(--classD);
|
||||
z-index: -1;
|
||||
|
||||
.joe_container {
|
||||
position: relative;
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -249,7 +249,7 @@
|
|||
}
|
||||
|
||||
.is-collapsible {
|
||||
max-height: 1000px;
|
||||
// max-height: 1000px;
|
||||
overflow: hidden;
|
||||
transition: all 300ms ease-in-out;
|
||||
}
|
||||
|
@ -526,4 +526,12 @@
|
|||
0% {
|
||||
box-shadow: 0 0 0 0 var(--theme);
|
||||
}
|
||||
}
|
||||
// 评论区 GIF 位置及大小调整
|
||||
.wl-gif-popup.display{
|
||||
bottom: 100% !important;
|
||||
top:auto !important;
|
||||
}
|
||||
.wl-gallery{
|
||||
max-height: 30vh !important;
|
||||
}
|
|
@ -172,7 +172,7 @@ const commonContext = {
|
|||
}
|
||||
// 代码复制
|
||||
if (ThemeConfig.enable_code_copy) {
|
||||
const text = $item.find("code[class*='language-']").text();
|
||||
const text = $item.find("code[class='language-none'], code[class*='language-']").text();
|
||||
const span = $(
|
||||
"<span class=\"copy-button\"><i class=\"joe-font joe-icon-copy\" title=\"复制代码\"></i></span>"
|
||||
);
|
||||
|
@ -527,6 +527,7 @@ const commonContext = {
|
|||
},
|
||||
/* 初始化3D标签云 */
|
||||
init3dTag() {
|
||||
ThemeConfig.tag_cloud_type = document.getElementById('tags-3d') ? '3d' : 'list'
|
||||
ThemeConfig.enable_tag_cloud=document.querySelector('.joe_aside__item.tags-cloud') !== null
|
||||
// console.log(ThemeConfig.enable_tag_cloud)
|
||||
if (
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,12 @@
|
|||
/*!
|
||||
* imagesLoaded PACKAGED v5.0.0
|
||||
* JavaScript is all like "You images are done yet or what?"
|
||||
* MIT License
|
||||
*/
|
||||
!function(t,e){"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,(function(){function t(){}let e=t.prototype;return e.on=function(t,e){if(!t||!e)return this;let i=this._events=this._events||{},s=i[t]=i[t]||[];return s.includes(e)||s.push(e),this},e.once=function(t,e){if(!t||!e)return this;this.on(t,e);let i=this._onceEvents=this._onceEvents||{};return(i[t]=i[t]||{})[e]=!0,this},e.off=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;let s=i.indexOf(e);return-1!=s&&i.splice(s,1),this},e.emitEvent=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;i=i.slice(0),e=e||[];let s=this._onceEvents&&this._onceEvents[t];for(let n of i){s&&s[n]&&(this.off(t,n),delete s[n]),n.apply(this,e)}return this},e.allOff=function(){return delete this._events,delete this._onceEvents,this},t})),
|
||||
/*!
|
||||
* imagesLoaded v5.0.0
|
||||
* JavaScript is all like "You images are done yet or what?"
|
||||
* MIT License
|
||||
*/
|
||||
function(t,e){"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,(function(t,e){let i=t.jQuery,s=t.console;function n(t,e,o){if(!(this instanceof n))return new n(t,e,o);let r=t;var h;("string"==typeof t&&(r=document.querySelectorAll(t)),r)?(this.elements=(h=r,Array.isArray(h)?h:"object"==typeof h&&"number"==typeof h.length?[...h]:[h]),this.options={},"function"==typeof e?o=e:Object.assign(this.options,e),o&&this.on("always",o),this.getImages(),i&&(this.jqDeferred=new i.Deferred),setTimeout(this.check.bind(this))):s.error(`Bad element for imagesLoaded ${r||t}`)}n.prototype=Object.create(e.prototype),n.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)};const o=[1,9,11];n.prototype.addElementImages=function(t){"IMG"===t.nodeName&&this.addImage(t),!0===this.options.background&&this.addElementBackgroundImages(t);let{nodeType:e}=t;if(!e||!o.includes(e))return;let i=t.querySelectorAll("img");for(let t of i)this.addImage(t);if("string"==typeof this.options.background){let e=t.querySelectorAll(this.options.background);for(let t of e)this.addElementBackgroundImages(t)}};const r=/url\((['"])?(.*?)\1\)/gi;function h(t){this.img=t}function d(t,e){this.url=t,this.element=e,this.img=new Image}return n.prototype.addElementBackgroundImages=function(t){let e=getComputedStyle(t);if(!e)return;let i=r.exec(e.backgroundImage);for(;null!==i;){let s=i&&i[2];s&&this.addBackground(s,t),i=r.exec(e.backgroundImage)}},n.prototype.addImage=function(t){let e=new h(t);this.images.push(e)},n.prototype.addBackground=function(t,e){let i=new d(t,e);this.images.push(i)},n.prototype.check=function(){if(this.progressedCount=0,this.hasAnyBroken=!1,!this.images.length)return void this.complete();let t=(t,e,i)=>{setTimeout((()=>{this.progress(t,e,i)}))};this.images.forEach((function(e){e.once("progress",t),e.check()}))},n.prototype.progress=function(t,e,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!t.isLoaded,this.emitEvent("progress",[this,t,e]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,t),this.progressedCount===this.images.length&&this.complete(),this.options.debug&&s&&s.log(`progress: ${i}`,t,e)},n.prototype.complete=function(){let t=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(t,[this]),this.emitEvent("always",[this]),this.jqDeferred){let t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},h.prototype=Object.create(e.prototype),h.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.img.crossOrigin&&(this.proxyImage.crossOrigin=this.img.crossOrigin),this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.currentSrc||this.img.src)},h.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},h.prototype.confirm=function(t,e){this.isLoaded=t;let{parentNode:i}=this.img,s="PICTURE"===i.nodeName?i:this.img;this.emitEvent("progress",[this,s,e])},h.prototype.handleEvent=function(t){let e="on"+t.type;this[e]&&this[e](t)},h.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},h.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},h.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype=Object.create(h.prototype),d.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},d.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.element,e])},n.makeJQueryPlugin=function(e){(e=e||t.jQuery)&&(i=e,i.fn.imagesLoaded=function(t,e){return new n(this,t,e).jqDeferred.promise(i(this))})},n.makeJQueryPlugin(),n}));
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -17,7 +17,7 @@
|
|||
<div class="joe_main">
|
||||
<div class="joe_index">
|
||||
<!-- 轮播图-->
|
||||
<th:block th:if="${theme.config.carousel.enable_banner} and ${not #lists.isEmpty(theme.config.carousel.banner_source)}">
|
||||
<th:block th:if="${theme.config.carousel.enable_banner} and ${not #lists.isEmpty(theme.config.carousel.banner_data_group)}">
|
||||
<th:block th:replace="~{modules/macro/banner :: banner}" />
|
||||
</th:block>
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
|||
<th:block th:if="${!theme.config.home.enable_index_list_ajax}">
|
||||
<th:block th:replace="~{modules/common/pagination :: pagination}" />
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.home.enable_index_list_ajax}">
|
||||
<th:block th:if="${posts.hasNext()} and ${theme.config.home.enable_index_list_ajax}">
|
||||
<div class="joe_load_container"
|
||||
th:with="nextPage = ${posts.totalPages == posts.page?'':posts.nextUrl}">
|
||||
<div class="joe_load" th:data-next="@{${nextPage}}">查看更多 </div>
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
</style>
|
||||
|
||||
<script type="module" th:inline="javascript">
|
||||
import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
|
||||
import { init } from /*[[${theme.config.basic.waline.waline_js_comment}]]*/'';
|
||||
|
||||
init({
|
||||
el: '#waline',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="https://www.thymeleaf.org">
|
||||
<th:block th:fragment="ads_aside(ads_url, ads_img)">
|
||||
<th:block th:fragment="ads_aside_img(ads_url, ads_img)">
|
||||
<section class="joe_aside__item advert">
|
||||
<a class="joe_advert" target="_blank" rel="noopener noreferrer nofollow" th:href="${ads_url}" title="广告">
|
||||
<img class="omit lazyload" width="100%" th:data-src="${ads_img}" th:src="${theme.config.home.lazyload_thumbnail}" alt="广告"/>
|
||||
|
@ -8,4 +8,9 @@
|
|||
</a>
|
||||
</section>
|
||||
</th:block>
|
||||
<th:block th:fragment="ads_aside_code(ads_code)">
|
||||
<section class="joe_aside__item advert" th:utext="${ads_code}">
|
||||
|
||||
</section>
|
||||
</th:block>
|
||||
</html>
|
|
@ -1,11 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="https://www.thymeleaf.org">
|
||||
<th:block th:fragment="ads_post(ads_url, ads_img)">
|
||||
<th:block th:fragment="ads_post(kind, data)">
|
||||
<section class="joe_advert-large">
|
||||
<a target="_blank" rel="noopener noreferrer nofollow" th:href="${ads_url}" title="广告">
|
||||
<img class="omit" width="100%" th:src="${ads_img}" alt="广告"/>
|
||||
<th:block th:if="${kind == 'img'}">
|
||||
<a target="_blank" rel="noopener noreferrer nofollow" th:href="${data.ads_url}" title="广告">
|
||||
<img class="omit" width="100%" th:src="${data.ads_img}" alt="广告"/>
|
||||
<span class="icon">广告</span>
|
||||
</a>
|
||||
</th:block>
|
||||
<th:block th:if="${kind == 'code'}" th:utext="${data.ads_code}">
|
||||
|
||||
</th:block>
|
||||
</section>
|
||||
</th:block>
|
||||
</html>
|
|
@ -4,7 +4,45 @@
|
|||
<aside class="joe_aside"
|
||||
th:classappend="${theme.config.aside.aside_position == 'left' ? 'pos_left':''}">
|
||||
<th:block th:each="aside : ${theme.config.aside.enable_outpost_aside}">
|
||||
<th:block th:replace="~{modules/widgets/asideWidget :: ${aside.template_aside}}" />
|
||||
<th:block th:switch="${aside.template_aside}">
|
||||
<th:block th:case="'enable_blogger'">
|
||||
<!-- 博主信息-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_blogger}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_notice'">
|
||||
<!-- 公告-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_notice(notice_data = ${aside.aside_notice})}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_picture'">
|
||||
<!-- 图片-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_picture(pic_data = ${aside.aside_picture})}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_music_player'">
|
||||
<!-- 音乐播放器-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_music_player(music_data = ${aside.aside_music_player})}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_newest_post'">
|
||||
<!-- 最新文章-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_newest_post}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_lifetime'">
|
||||
<!-- 人生倒计时-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_lifetime}" />
|
||||
</th:block>
|
||||
<th:block th:case="'show_newreply'">
|
||||
<!-- 最新评论-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: show_newreply(new_reply_data = ${aside.aside_newreply})}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_tag_cloud'">
|
||||
<!-- 标签云-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_tag_cloud(tag_cloud_data = ${aside.aside_tag_cloud})}" />
|
||||
</th:block>
|
||||
<th:block th:case="'enable_ads_aside'">
|
||||
<!-- 侧边栏广告-->
|
||||
<th:block th:include="~{modules/widgets/asideWidget :: enable_ads_aside(ads_data = ${aside.aside_ads})}" />
|
||||
</th:block>
|
||||
|
||||
</th:block>
|
||||
|
||||
</th:block>
|
||||
|
||||
|
|
|
@ -15,9 +15,10 @@
|
|||
<th:block th:if="${theme.config.post.enable_relate_post == true}">
|
||||
<th:block th:replace="~{modules/macro/relate :: relate}" />
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.ads.enable_post_ads_aside} and ${#strings.trim(theme.config.ads.post_ads_aside_img) !=''}">
|
||||
<th:block th:replace="~{modules/ads/ads_aside :: ads_aside(ads_url=${theme.config.ads.post_ads_aside_url}, ads_img=${theme.config.ads.post_ads_aside_img})}" />
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.ads.enable_ads_aside != 'none'} and ${not #lists.isEmpty(theme.config.ads.ads_aside)}"
|
||||
th:each="ads_data : ${theme.config.ads.ads_aside}">
|
||||
<th:block th:replace="~{modules/ads/ads_post :: ads_post(kind = ${theme.config.ads.enable_ads_aside}, data = ${ads_data})}" />
|
||||
</th:block>
|
||||
</div>
|
||||
</aside>
|
||||
</th:block>
|
||||
|
|
|
@ -15,8 +15,7 @@
|
|||
</th:block>
|
||||
</div>
|
||||
<a class="link" th:href="${site.url}" target="_blank" rel="noopener noreferrer nofollow">
|
||||
[[${theme.config.blogger.nickname ?: site.title}]]
|
||||
<!-- 这里应该还有一个等级-->
|
||||
[[${theme.config.blogger.nickname ?: site.title}]]<img class="level" th:src="@{/assets/svg/level_1.svg}" alt="博主等级">
|
||||
</a>
|
||||
<th:block th:if="${theme.config.blogger.motto != ''}">
|
||||
<p class="motto joe_motto">[[${theme.config.blogger.motto}]]</p>
|
||||
|
|
|
@ -73,6 +73,14 @@
|
|||
</p>
|
||||
</th:block>
|
||||
|
||||
<th:block th:if="${theme.config.footer.driven_by == 'custom'} and ${theme.config.footer.driven_by_custom_img != ''}">
|
||||
<p class="site_driven">本站点由
|
||||
<a th:href="${theme.config.footer.driven_by_custom_url}" target="_blank" rel="noopener noreferrer nofollow">
|
||||
<img th:class="${theme.config.footer.driven_by}" th:src="${theme.config.footer.driven_by_custom_img}" alt="云服务商"/>
|
||||
</a>提供云服务
|
||||
</p>
|
||||
</th:block>
|
||||
|
||||
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.footer.enable_birthday}">
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
<script id="theme-config-getter" type="text/javascript">
|
||||
if (window.location.hostname === 'localhost'||window.location.hostname === '127.0.0.1') {
|
||||
ThemeConfig['mode'] = "development"
|
||||
console.log(ThemeConfig.mode)
|
||||
}
|
||||
console.log(ThemeConfig.mode)
|
||||
|
||||
if (ThemeConfig.mode === "development") {
|
||||
console.log("Joe3主题配置:", ThemeConfig);
|
||||
|
|
|
@ -2,15 +2,23 @@
|
|||
<html lang="en" xmlns:th="https://www.thymeleaf.org">
|
||||
<th:block th:fragment="donate">
|
||||
<div class="joe_donate">
|
||||
<i class="joe-font joe-icon-shang"></i>
|
||||
<th:block th:if="${theme.config.post.qrcode_zfb != ''} or ${theme.config.post.qrcode_wx != ''}">
|
||||
<ol class="joe_donate_list"
|
||||
th:classappend="${theme.config.post.qrcode_zfb != '' && theme.config.post.qrcode_wx != '' ?'two':''}">
|
||||
<th:block th:if="${theme.config.post.qrcode_zfb}">
|
||||
<li><img th:src="${theme.config.post.qrcode_zfb}" alt="qrcode alipay"/></li>
|
||||
<th:block th:if="${theme.config.post.qrcode_zfb} and ${#strings.trim(theme.config.post.qrcode_wx) != ''}">
|
||||
<li>
|
||||
<p>支付宝打赏</p>
|
||||
<img th:src="${theme.config.post.qrcode_zfb}" alt="qrcode alipay"/></li>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.post.qrcode_wx}">
|
||||
<li><img th:src="${theme.config.post.qrcode_wx}" alt="qrcode weixin"/></li>
|
||||
<th:block th:if="${theme.config.post.qrcode_wx} and ${#strings.trim(theme.config.post.qrcode_wx) != ''}">
|
||||
<li>
|
||||
<p>微信打赏</p>
|
||||
<img th:src="${theme.config.post.qrcode_wx}" alt="qrcode weixin"/></li>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.post.qrcode_qq} and ${#strings.trim(theme.config.post.qrcode_qq) != ''}">
|
||||
<li>
|
||||
<p>QQ打赏</p>
|
||||
<img th:src="${theme.config.post.qrcode_qq}" alt="qrcode qq"/></li>
|
||||
</th:block>
|
||||
</ol>
|
||||
</th:block>
|
||||
|
|
|
@ -76,9 +76,9 @@
|
|||
</th:block>
|
||||
<link rel="preload stylesheet" as="style" th:href="${source_link+'/assets/css/min/responsive.min.css?v='+theme.spec.version}">
|
||||
<link rel="stylesheet" th:href="${source_link+'/assets/lib/fancybox/jquery.fancybox.min.css'}">
|
||||
<link
|
||||
<link th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}"
|
||||
rel="stylesheet"
|
||||
href="https://unpkg.com/@waline/client@v2/dist/waline.css"
|
||||
th:href="${theme.config.basic.waline.waline_css}"
|
||||
/>
|
||||
<th:block th:if="${ttheme.config.other.enable_clean_mode != true} and ${theme.config.theme.cursor_skin != 'off'}">
|
||||
<link rel="stylesheet" th:href="${source_link+'/assets/cursor/style/min/'+theme.config.theme.cursor_skin+'.min.css'}">
|
||||
|
|
|
@ -4,26 +4,16 @@
|
|||
<div class="joe_index__banner">
|
||||
<div class="swiper">
|
||||
<div class="swiper-wrapper">
|
||||
<th:block th:each="bannerData : ${theme.config.carousel.banner_source}">
|
||||
<th:block th:with="post = ${postFinder.getByName(bannerData.posts)}">
|
||||
<div class="swiper-slide">
|
||||
<a class="item"
|
||||
th:classappend="${post.status.permalink !='' ? 'clickable': ''}"
|
||||
th:href="${post.status.permalink !='' ? post.status.permalink : 'javascript:;'}" target="_blank" rel="noopener noreferrer nofollow">
|
||||
<img width="100%" height="100%" class="thumbnail lazyload" th:data-src="${post.spec.cover ?: '/themes/theme-Joe3/assets/img/Joe3.png'}" th:src="${theme.config.carousel.banner_lazyload_img}" th:alt="${post.spec.title}">
|
||||
|
||||
<div class="title-row">
|
||||
<h3 class="title">[[${post.spec.title}]]</h3>
|
||||
|
||||
<th:block th:if="${post.status.excerpt != ''}">
|
||||
<p class="subtitle">[[${post.status.excerpt}]]</p>
|
||||
<th:block th:each="banner_data : ${theme.config.carousel.banner_data_group}">
|
||||
<th:block th:switch="${banner_data.banner_section_type}">
|
||||
<th:block th:case="'post'">
|
||||
<th:block th:include="~{modules/macro/banner_item_data :: data_by_post(post_metadata = ${banner_data.data_by_post})}" />
|
||||
</th:block>
|
||||
</div>
|
||||
<th:block th:case="'custom'">
|
||||
<th:block th:include="~{modules/macro/banner_item_data :: data_by_custom(banner_url = ${banner_data.data_by_custom.banner_url}, banner_cover = ${banner_data.data_by_custom.banner_img}, banner_title = ${banner_data.data_by_custom.banner_title}, banner_excerpt = ${banner_data.data_by_custom.banner_subtitle})}" />
|
||||
</th:block>
|
||||
</th:block>
|
||||
|
||||
<i class="joe-font joe-icon-zhifeiji"></i>
|
||||
</a>
|
||||
</div>
|
||||
</th:block>
|
||||
</th:block>
|
||||
</div>
|
||||
<th:block th:if="${theme.config.carousel.enable_banner_pagination}">
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<th:block th:fragment="data_by_post(post_metadata)">
|
||||
<div class="swiper-slide" th:with="post = ${postFinder.getByName(post_metadata)}">
|
||||
<a class="item"
|
||||
th:classappend="${post.status.permalink !='' ? 'clickable': ''}"
|
||||
th:href="${post.status.permalink !='' ? post.status.permalink : 'javascript:;'}" target="_blank" rel="noopener noreferrer nofollow">
|
||||
<img width="100%" height="100%" class="thumbnail lazyload" th:data-src="${post.spec.cover ?: '/themes/theme-Joe3/assets/img/Joe3.png'}" th:src="${theme.config.carousel.banner_lazyload_img}" th:alt="${post.spec.title}">
|
||||
|
||||
<div class="title-row">
|
||||
<h3 class="title">[[${post.spec.title}]]</h3>
|
||||
|
||||
<th:block th:if="${post.status.excerpt != ''}">
|
||||
<p class="subtitle">[[${post.status.excerpt}]]</p>
|
||||
</th:block>
|
||||
</div>
|
||||
|
||||
<i class="joe-font joe-icon-zhifeiji"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</th:block>
|
||||
<th:block th:fragment="data_by_custom(banner_url, banner_cover, banner_title, banner_excerpt)">
|
||||
<div class="swiper-slide">
|
||||
<a class="item"
|
||||
th:classappend="${banner_url !='' ? 'clickable': ''}"
|
||||
th:href="${banner_url !='' ? banner_url : 'javascript:;'}" target="_blank" rel="noopener noreferrer nofollow">
|
||||
<img width="100%" height="100%" class="thumbnail lazyload" th:data-src="${banner_cover ?: '/themes/theme-Joe3/assets/img/Joe3.png'}" th:src="${theme.config.carousel.banner_lazyload_img}" th:alt="${banner_title}">
|
||||
|
||||
<div class="title-row">
|
||||
<h3 class="title">[[${banner_title}]]</h3>
|
||||
|
||||
<th:block th:if="${banner_excerpt != ''}">
|
||||
<p class="subtitle">[[${banner_excerpt}]]</p>
|
||||
</th:block>
|
||||
</div>
|
||||
|
||||
<i class="joe-font joe-icon-zhifeiji"></i>
|
||||
</a>
|
||||
</div>
|
||||
</th:block>
|
||||
</html>
|
|
@ -5,26 +5,26 @@
|
|||
<div class="box_title">
|
||||
<h2>评论区</h2>
|
||||
</div>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}">
|
||||
<halo:comment
|
||||
group="content.halo.run"
|
||||
th:attr="name=${name},kind=${kind}"
|
||||
colorScheme="document.documentElement.getAttribute('data-mode')"
|
||||
/>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline_serverURL) !=''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}">
|
||||
<div id="waline"></div>
|
||||
<style>
|
||||
#waline .wl-count{color:var(--routine);}
|
||||
</style>
|
||||
|
||||
<script type="module" th:inline="javascript">
|
||||
import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
|
||||
import { init } from /*[[${theme.config.basic.waline.waline_js_comment}]]*/'';
|
||||
|
||||
init({
|
||||
el: '#waline',
|
||||
dark: 'html[data-mode="dark"]',
|
||||
serverURL: /*[[${theme.config.basic.waline_serverURL}]]*/'',
|
||||
serverURL: /*[[${theme.config.basic.waline.waline_serverURL}]]*/'',
|
||||
comment: true,
|
||||
requiredMeta:['nick', 'mail'],
|
||||
|
||||
|
|
|
@ -23,16 +23,16 @@
|
|||
<ul class="items">
|
||||
<li>[[${#dates.format(post.spec.publishTime,'yyyy-MM-dd')}]]</li>
|
||||
<li><i class="joe-font joe-icon-eye"></i>[[${post.stats.visit}]]</li>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}">
|
||||
<li><i class="joe-font joe-icon-message"></i>[[${post.stats.comment}]]</li>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline_serverURL) !=''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}">
|
||||
<li><i class="joe-font joe-icon-message"></i><span class="waline-comment-count" th:data-path="${post.status.permalink}">0</span></li>
|
||||
<script type="module" th:inline="javascript">
|
||||
import { commentCount } from 'https://unpkg.com/@waline/client@v2/dist/comment.mjs';
|
||||
import { commentCount } from /*[[${theme.config.basic.waline.waline_js_list}]]*/'';
|
||||
|
||||
commentCount({
|
||||
serverURL: /*[[${theme.config.basic.waline_serverURL}]]*/'',
|
||||
serverURL: /*[[${theme.config.basic.waline.waline_serverURL}]]*/'',
|
||||
path:/*[[${post.status.permalink}]]*/'' ,
|
||||
|
||||
// 可选的,用于自定选择器,默认为 `'.waline-pageview-count'`
|
||||
|
|
|
@ -43,9 +43,9 @@
|
|||
<!--相册-->
|
||||
<th:block th:if="${htmlType == 'photos'}">
|
||||
<script th:src="${source_link+'/assets/lib/justifiedGallery/justifiedGallery.min.js'}"></script>
|
||||
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
|
||||
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
|
||||
<script src="https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js"></script>
|
||||
<script th:src="${source_link+'/assets/lib/masonry/masonry.pkgd.min.js'}"></script>
|
||||
<script th:src="${source_link+'/assets/lib/masonry/isotope.pkgd.min.js'}"></script>
|
||||
<script th:src="${source_link+'/assets/lib/masonry/imagesloaded.pkgd.min.js'}"></script>
|
||||
|
||||
</th:block>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
weather_key : /*[[${theme.config.blogger.weather_key}]]*/ '',
|
||||
link_behavior : /*[[${theme.config.theme.link_behavior}]]*/ 'default',
|
||||
enable_tag_cloud : true,
|
||||
tag_cloud_type : /*[[${theme.config.aside.tag_cloud_type}]]*/ '3d',
|
||||
tag_cloud_type : document.getElementById('tags-3d') ? '3d' : 'list',
|
||||
enable_fixed_header : /*[[${theme.config.navbar.enable_fixed_header}]]*/ true,
|
||||
enable_clean_mode : /*[[${theme.config.other.enable_clean_mode}]]*/ false,
|
||||
cursor_effect : /*[[${theme.config.theme.cursor_effect}]]*/ 'off',
|
||||
|
|
|
@ -3,40 +3,40 @@
|
|||
<th:block th:fragment="enable_blogger">
|
||||
<th:block th:replace="~{modules/common/blogger :: blogger}" />
|
||||
</th:block>
|
||||
<th:block th:fragment="enable_notice">
|
||||
<th:block th:fragment="enable_notice(notice_data)">
|
||||
<section class="joe_aside__item notice">
|
||||
<div class="joe_aside__item-title">
|
||||
<!-- <#-- <i class="joe-font joe-icon-speaker"></i> –>-->
|
||||
<th:block th:replace="~{modules/macro/speaker :: speaker}" />
|
||||
<span class="text">公告信息</span>
|
||||
<span class="text">[[${notice_data.notice_title}]]</span>
|
||||
</div>
|
||||
<div class="joe_aside__item-contain">
|
||||
<div class="notice_content" th:utext="${theme.config.aside.site_notice}"></div>
|
||||
<div class="notice_content" th:utext="${notice_data.site_notice}"></div>
|
||||
</div>
|
||||
</section>
|
||||
</th:block>
|
||||
<th:block th:fragment="enable_qrcode">
|
||||
<th:block th:fragment="enable_picture(pic_data)">
|
||||
<section class="joe_aside__item qrcode">
|
||||
<div class="joe_aside__item-title">
|
||||
<i class="joe-font joe-icon-qrcode"></i>
|
||||
<span class="text">[[${theme.config.aside.qrcode_title}]]</span>
|
||||
<span class="text">[[${pic_data.qrcode_title}]]</span>
|
||||
</div>
|
||||
<div class="joe_aside__item-contain">
|
||||
<img class="qrcode_img lazyload" th:src="${theme.config.aside.qrcode_url}" th:data-src="${theme.config.aside.qrcode_url}" alt="二维码"/>
|
||||
<th:block th:if="${theme.config.aside.qrcode_description != ''}">
|
||||
<p class="qrcode_description">[[${theme.config.aside.qrcode_description}]]</p>
|
||||
<img class="qrcode_img lazyload" th:src="${pic_data.qrcode_url}" th:data-src="${pic_data.qrcode_url}" th:alt="${pic_data.qrcode_title}"/>
|
||||
<th:block th:if="${pic_data.qrcode_description != ''}">
|
||||
<p class="qrcode_description">[[${pic_data.qrcode_description}]]</p>
|
||||
</th:block>
|
||||
</div>
|
||||
</section>
|
||||
</th:block>
|
||||
<th:block th:fragment="enable_music_player">
|
||||
<th:block th:if="${theme.config.aside.music_id != ''}">
|
||||
<th:block th:fragment="enable_music_player(music_data)">
|
||||
<th:block th:if="${music_data.music_id != ''}">
|
||||
<section class="joe_aside__item timelife">
|
||||
<div class="joe_aside__item-title">
|
||||
<i class="joe-font joe-icon-yinfu"></i>
|
||||
<span class="text">我的歌单</span>
|
||||
</div>
|
||||
<div id="aplayer" class="aplayer" th:data-id="${theme.config.aside.music_id}" list-max-height="20px" data-server="netease" data-type="playlist" data-fixed="false" data-listfolded="true" data-order="random" data-mode="#f3f3f7"></div>
|
||||
<div id="aplayer" class="aplayer" th:data-id="${music_data.music_id}" list-max-height="20px" data-server="netease" data-type="playlist" data-fixed="false" data-listfolded="true" data-order="random" data-mode="#f3f3f7"></div>
|
||||
</section>
|
||||
</th:block>
|
||||
</th:block>
|
||||
|
@ -52,7 +52,7 @@
|
|||
<div class="joe_aside__item-contain"></div>
|
||||
</section>
|
||||
</th:block>
|
||||
<th:block th:fragment="show_newreply">
|
||||
<th:block th:fragment="show_newreply(new_reply_data)">
|
||||
<th:block th:if="${theme.config.other.enable_clean_mode !=true}">
|
||||
<section class="joe_aside__item newreply">
|
||||
<div class="joe_aside__item-title">
|
||||
|
@ -61,9 +61,9 @@
|
|||
</div>
|
||||
|
||||
<ul class="joe_aside__item-contain"
|
||||
th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}"
|
||||
th:each="result : ${commentFinder.list(null,1,theme.config.aside.show_newreply_num)}">
|
||||
th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}"
|
||||
th:each="result : ${commentFinder.list(null,1,new_reply_data.show_newreply_num)}">
|
||||
<li class="item">
|
||||
<div class="user">
|
||||
<img width="35" height="35" class="avatar lazyload" th:data-src="${result.owner.avatar ?: '/themes/theme-Joe3/assets/img/peeps-avatar.png'} " th:src="${theme.config.blogger.lazyload_avatar}" alt="头像">
|
||||
|
@ -109,7 +109,7 @@
|
|||
|
||||
</th:block>
|
||||
</ul>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline_serverURL) !=''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}">
|
||||
<ul class="joe_aside__item-contain" id="waline-recent">
|
||||
</ul>
|
||||
<style>
|
||||
|
@ -119,13 +119,13 @@
|
|||
max-width: 100%;}
|
||||
</style>
|
||||
<script type="module" th:inline="javascript">
|
||||
import { RecentComments } from 'https://cdn.jsdelivr.net/npm/@waline/client/dist/waline.mjs';
|
||||
import { RecentComments } from /*[[${theme.config.basic.waline.waline_js_leaving}]]*/'';
|
||||
|
||||
RecentComments({
|
||||
serverURL: /*[[${theme.config.basic.waline_serverURL}]]*/'',
|
||||
count: /*[[${theme.config.aside.show_newreply_num}]]*/5,
|
||||
serverURL: /*[[${theme.config.basic.waline.waline_serverURL}]]*/'',
|
||||
count: /*[[${new_reply_data.show_newreply_num}]]*/5,
|
||||
}).then(({ comments }) => {
|
||||
document.getElementById('waline-recent').innerHTML = comments.data.map(
|
||||
document.getElementById('waline-recent').innerHTML = comments.map(
|
||||
(comment) =>{
|
||||
const commentContent = document.createElement('div');
|
||||
let commentText =''
|
||||
|
@ -171,7 +171,7 @@
|
|||
</section>
|
||||
</th:block>
|
||||
</th:block>
|
||||
<th:block th:fragment="enable_tag_cloud">
|
||||
<th:block th:fragment="enable_tag_cloud(tag_cloud_data)">
|
||||
<section class="joe_aside__item tags-cloud" id="tags-cloud">
|
||||
<div class="joe_aside__item-title">
|
||||
<i class="joe-font joe-icon-tag"></i>
|
||||
|
@ -182,7 +182,7 @@
|
|||
</div>
|
||||
<div class="joe_aside__item-contain">
|
||||
|
||||
<div th:class="'tags-cloud-list '+${theme.config.aside.tag_cloud_width =='responsive' ? 'responsive':'static'}" th:style="${theme.config.aside.tag_cloud_type == '3d' ? 'display:none':''}">
|
||||
<div th:class="'tags-cloud-list '+${tag_cloud_data.tag_cloud_width =='responsive' ? 'responsive':'static'}" th:style="${tag_cloud_data.tag_cloud_type == '3d' ? 'display:none':''}">
|
||||
<th:block th:with="tags = ${tagFinder.listAll()}">
|
||||
|
||||
<a th:each="tag : ${tags}"
|
||||
|
@ -190,7 +190,7 @@
|
|||
</th:block>
|
||||
|
||||
</div>
|
||||
<th:block th:if="${theme.config.aside.tag_cloud_type == '3d'}">
|
||||
<th:block th:if="${tag_cloud_data.tag_cloud_type == '3d'}">
|
||||
<div id="tags-3d">
|
||||
<div class="empty">加载中…</div>
|
||||
</div>
|
||||
|
@ -202,9 +202,18 @@
|
|||
<!--</@tagTag>-->
|
||||
</section>
|
||||
</th:block>
|
||||
<th:block th:fragment="enable_ads_aside">
|
||||
<th:block th:if="${theme.config.ads.enable_aside_ads} and ${#strings.trim(theme.config.ads.aside_ads_img) !=''}">
|
||||
<th:block th:replace="~{modules/ads/ads_aside :: ads_aside(ads_url=${theme.config.ads.aside_ads_url}, ads_img=${theme.config.ads.aside_ads_img})}" />
|
||||
<th:block th:fragment="enable_ads_aside(ads_data)">
|
||||
<th:block th:switch="${ads_data.aside_ads_type}">
|
||||
<th:block th:case="'img'">
|
||||
<th:block th:if="${#strings.trim(ads_data.aside_ads_img) !=''}">
|
||||
<th:block th:replace="~{modules/ads/ads_aside :: ads_aside_img(ads_url=${ads_data.aside_ads_url}, ads_img=${ads_data.aside_ads_img})}" />
|
||||
</th:block>
|
||||
</th:block>
|
||||
<th:block th:case="'code'">
|
||||
<th:block th:replace="~{modules/ads/ads_aside :: ads_aside_code(ads_code = ${ads_data.aside_ads_code})}" />
|
||||
</th:block>
|
||||
|
||||
</th:block>
|
||||
|
||||
</th:block>
|
||||
</html>
|
|
@ -97,7 +97,7 @@
|
|||
</style>
|
||||
|
||||
<script type="module" th:inline="javascript">
|
||||
import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
|
||||
import { init } from /*[[${theme.config.basic.waline.waline_js_comment}]]*/'';
|
||||
|
||||
init({
|
||||
el: /*[[${'#'+moment.metadata.name}]]*/'',
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
<img width="35" height="35" class="avatar lazyload" th:data-src="${theme.config.blogger.avatar}" th:src="${theme.config.blogger.lazyload_avatar}" th:alt="${moment.owner.displayName}">
|
||||
<div class="meta">
|
||||
<div class="author">
|
||||
<a class="link" th:href="@{authors}+'/'+${moment.owner.name}" th:title="${moment.owner.displayName}">[[${moment.owner.displayName}]]</a>
|
||||
<a class="link" th:href="${site.url}" th:title="${theme.config.blogger.nickname ?: site.title}">[[${theme.config.blogger.nickname ?: site.title}]]</a>
|
||||
<!-- 修改链接指向博客地址 title 和 显示为博主名/博客名 -->
|
||||
</div>
|
||||
<div class="item">
|
||||
<span class="text">[[${theme.config.blogger.motto?:'一句话介绍自己吧!'}]]</span>
|
||||
|
@ -98,7 +99,7 @@
|
|||
</style>
|
||||
|
||||
<script type="module" th:inline="javascript">
|
||||
import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
|
||||
import { init } from /*[[${theme.config.basic.waline.waline_js_comment}]]*/'';
|
||||
|
||||
init({
|
||||
el: /*[[${'#'+moment.metadata.name}]]*/'',
|
||||
|
|
|
@ -25,10 +25,10 @@
|
|||
<div class="item">
|
||||
<span class="text">[[${#dates.format(singlePage.spec.publishTime,'yyyy-MM-dd')}]]</span>
|
||||
<span class="line">/</span>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}">
|
||||
<span class="text">[[${singlePage.stats.comment}]] 评论</span>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline_serverURL) !=''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}">
|
||||
<span class="text waline-comment-count" th:data-path="@{${singlePage.status.permalink}}">0</span> 评论
|
||||
</th:block>
|
||||
<span class="line">/</span>
|
||||
|
@ -52,7 +52,7 @@
|
|||
<article th:class="'joe_detail__article animated fadeIn '+${#annotations.getOrDefault(singlePage, 'img_align', 'center')+'-img'}"
|
||||
th:classappend="|${#annotations.getOrDefault(singlePage, 'enable_read_limit', 'false') == 'true' ?'limited': ''} ${(#annotations.getOrDefault(singlePage, 'enable_copy', 'true') == 'false' or theme.config.post.enable_copy != true) ? 'uncopy' : ''} ${theme.config.post.enable_indent ? 'indent':''} ${(theme.config.code_block.enable_code_line_number == true and theme.config.code_block.enable_code_newline !=true) ? 'line-numbers':''} ${theme.config.code_block.enable_single_code_select == true ? 'single_code_select': ''}|">
|
||||
<div class="joe_leaving tpl">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline_serverURL) ==''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'default'} or ${#strings.trim(theme.config.basic.waline.waline_serverURL) ==''}">
|
||||
|
||||
<ul class="joe_leaving-list">
|
||||
<li th:each="result : ${commentFinder.list(null,1,20)}" class="item">
|
||||
|
@ -69,7 +69,7 @@
|
|||
|
||||
</ul>
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline_serverURL) !=''}">
|
||||
<th:block th:if="${theme.config.basic.comment_option == 'waline'} and ${#strings.trim(theme.config.basic.waline.waline_serverURL) !=''}">
|
||||
<ul class="joe_leaving-list" id="waline-leaving">
|
||||
</ul>
|
||||
<style>
|
||||
|
@ -78,36 +78,34 @@
|
|||
height: 24px;
|
||||
max-width: 100%;}
|
||||
</style>
|
||||
<script type="module" th:inline="javascript">
|
||||
import { RecentComments } from 'https://cdn.jsdelivr.net/npm/@waline/client/dist/waline.mjs';
|
||||
const url = /*[[${theme.config.basic.waline_serverURL+'/api/comment?type=count'}]]*/'';
|
||||
let countNum = 0;
|
||||
fetch(url).then(async (response) => {
|
||||
const data = await response.json();
|
||||
countNum = data.data;
|
||||
});
|
||||
<script type="module" th:inline="javascript">
|
||||
import { RecentComments } from /*[[${theme.config.basic.waline.waline_js_leaving}]]*/'';
|
||||
const serverURL = /*[[${theme.config.basic.waline.waline_serverURL}]]*/'';
|
||||
const path = window.location.pathname;
|
||||
|
||||
RecentComments({
|
||||
serverURL: /*[[${theme.config.basic.waline_serverURL}]]*/'',
|
||||
count: countNum,
|
||||
}).then(({ comments }) => {
|
||||
const url = serverURL + '/api/comment?path=' + path + '&pageSize=100';
|
||||
|
||||
document.getElementById('waline-leaving').innerHTML = comments.data.map(
|
||||
(comment) =>{
|
||||
const timestamp = new Date(comment.time);
|
||||
fetch(url)
|
||||
.then(async (response) => {
|
||||
const data = await response.json();
|
||||
console.log(data.data.data)
|
||||
const comments = data.data.data;
|
||||
document.getElementById('waline-leaving').innerHTML = comments.map(
|
||||
(comment) =>{
|
||||
const timestamp = new Date(comment.time);
|
||||
|
||||
// 获取年、月、日、时、分、秒
|
||||
const year = timestamp.getFullYear();
|
||||
const month = timestamp.getMonth() + 1; // 月份是从0开始的,所以要加1
|
||||
const day = timestamp.getDate();
|
||||
const hours = timestamp.getHours();
|
||||
const minutes = timestamp.getMinutes();
|
||||
const seconds = timestamp.getSeconds();
|
||||
// 获取年、月、日、时、分、秒
|
||||
const year = timestamp.getFullYear();
|
||||
const month = timestamp.getMonth() + 1; // 月份是从0开始的,所以要加1
|
||||
const day = timestamp.getDate();
|
||||
const hours = timestamp.getHours();
|
||||
const minutes = timestamp.getMinutes();
|
||||
const seconds = timestamp.getSeconds();
|
||||
|
||||
// 构建日期时间字符串
|
||||
const commentTime = `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day} ${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
||||
// 构建日期时间字符串
|
||||
const commentTime = `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day} ${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
||||
|
||||
return `<li class="item">
|
||||
return `<li class="item">
|
||||
<div class="user">
|
||||
<img class="avatar lazyload" src="${ThemeConfig.lazyload_avatar}" alt="用户头像"
|
||||
data-src="${comment.avatar}" />
|
||||
|
@ -119,14 +117,16 @@
|
|||
</div>
|
||||
</li>`;
|
||||
|
||||
}).join('');
|
||||
const leaving =document.createElement('script')
|
||||
leaving.src = /*[[@{/assets/js/min/leaving.min.js}]]*/''
|
||||
leaving.type= 'module'
|
||||
document.body.appendChild(leaving)
|
||||
}).join('');
|
||||
const leaving =document.createElement('script')
|
||||
leaving.src = /*[[@{/assets/js/min/leaving.min.js}]]*/''
|
||||
leaving.type= 'module'
|
||||
document.body.appendChild(leaving)
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</th:block>
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
</style>
|
||||
|
||||
<script type="module" th:inline="javascript">
|
||||
import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
|
||||
import { init } from /*[[${theme.config.basic.waline.waline_js_comment}]]*/'';
|
||||
|
||||
init({
|
||||
el: '#waline',
|
||||
|
|
|
@ -88,8 +88,9 @@
|
|||
</div>
|
||||
</th:block>
|
||||
</div>
|
||||
<th:block th:if="${theme.config.ads.enable_post_ads_top} and ${#strings.trim(theme.config.ads.post_ads_top_img) !=''}">
|
||||
<th:block th:replace="~{modules/ads/ads_post :: ads_post(ads_url=${theme.config.ads.post_ads_top_url}, ads_img=${theme.config.ads.post_ads_top_img})}" />
|
||||
<th:block th:if="${theme.config.ads.enable_ads_top != 'none'} and ${not #lists.isEmpty(theme.config.ads.ads_top)}"
|
||||
th:each="ads_data : ${theme.config.ads.ads_top}">
|
||||
<th:block th:replace="~{modules/ads/ads_post :: ads_post(kind = ${theme.config.ads.enable_ads_top}, data = ${ads_data})}" />
|
||||
</th:block>
|
||||
<article th:class="'joe_detail__article animated fadeIn '+${#annotations.getOrDefault(post, 'img_align', 'center')+'-img'}"
|
||||
th:classappend="|${#annotations.getOrDefault(post, 'enable_read_limit', 'false') == 'true' ?'limited': ''} ${(#annotations.getOrDefault(post, 'enable_copy', 'true') == 'false' or theme.config.post.enable_copy != true) ? 'uncopy' : ''} ${theme.config.post.enable_indent ? 'indent':''} ${(theme.config.code_block.enable_code_line_number == true and theme.config.code_block.enable_code_newline !=true) ? 'line-numbers':''} ${theme.config.code_block.enable_single_code_select == true ? 'single_code_select': ''}|">
|
||||
|
@ -113,9 +114,10 @@
|
|||
</div>
|
||||
<th:block th:replace="~{modules/post_operate :: post_operate}" />
|
||||
<th:block th:replace="~{modules//macro/post_copyright :: post_copyright}" />
|
||||
<th:block th:if="${theme.config.ads.enable_post_ads_bottom} and ${#strings.trim(theme.config.ads.post_ads_bottom_img) !=''}">
|
||||
<th:block th:replace="~{modules/ads/ads_post :: ads_post(ads_url=${theme.config.ads.post_ads_bottom_url}, ads_img=${theme.config.ads.post_ads_bottom_img})}" />
|
||||
</th:block>
|
||||
<th:block th:if="${theme.config.ads.enable_ads_bottom != 'none'} and ${not #lists.isEmpty(theme.config.ads.ads_bottom)}"
|
||||
th:each="ads_data : ${theme.config.ads.ads_bottom}">
|
||||
<th:block th:replace="~{modules/ads/ads_post :: ads_post(kind = ${theme.config.ads.enable_ads_bottom}, data = ${ads_data})}" />
|
||||
</th:block>
|
||||
|
||||
</div>
|
||||
<th:block th:replace="~{modules/post_operate_aside :: post_operate_aside}" />
|
||||
|
|
|
@ -3,18 +3,18 @@ kind: Theme
|
|||
metadata:
|
||||
name: theme-Joe3
|
||||
spec:
|
||||
displayName: Theme Joe3
|
||||
displayName: Theme Joe3 ZBlog
|
||||
author:
|
||||
name: Jiewenhuang
|
||||
website: "https://halo.run"
|
||||
description: Halo2.0主题 Joe3
|
||||
description: Halo2.0主题 Joe3 ZBlog专版
|
||||
logo: "https://wmimg.com/i/70/2023/08/64d3c41d5bde2.webp"
|
||||
website: "https://www.jiewen.run"
|
||||
repo: "https://github.com/jiewenhuang/halo-theme-joe3.0"
|
||||
settingName: "theme-Joe-setting"
|
||||
configMapName: "theme-Joe-configMap"
|
||||
version: "1.1.6"
|
||||
require: ">=2.8.0"
|
||||
version: "1.1.7"
|
||||
require: ">=2.11.0"
|
||||
customTemplates:
|
||||
page:
|
||||
- name: 留言板
|
||||
|
|
Loading…
Reference in New Issue