chore: 适配

This commit is contained in:
nineya 2023-03-25 16:28:00 +08:00
parent 88e393d846
commit e12c10ca27
33 changed files with 361 additions and 763 deletions

View File

@ -65,18 +65,6 @@ spec:
label: 关闭
- value: ""
label: 跟随默认配置
- $formkit: radio
name: index_carousel
label: 开启置顶轮播
value: true
help: '如果该文章被置顶,在此处可开启文章置顶轮播。'
options:
- value: "true"
label: 开启
- value: "false"
label: 关闭
- value: ""
label: 跟随默认配置
---

View File

@ -7,6 +7,12 @@ spec:
- group: basic_info
label: '基础信息'
formSchema:
- $formkit: text
name: metadata_name
label: 作者用户名
placeholder: 请输入用户名
value: admin
help: 后台用户管理中作者的用户名填写错误将导致个人资料显示异常示例admin
- $formkit: text
name: small_title
label: 网站副标题
@ -495,8 +501,6 @@ spec:
label: 广告模块
- value: 'recent_posts'
label: 最近文章模块
- value: 'recent_comments'
label: 最近评论模块
- value: 'categories'
label: 文章分类模块
- value: 'tags'
@ -527,12 +531,6 @@ spec:
label: 桌面设备隐藏
- value: 'is-not-hidden'
label: 不隐藏
- $formkit: text
name: metadata_name
label: 作者用户名
placeholder: 请输入用户名
value: admin
help: 后台用户管理中作者的用户名填写错误将导致个人资料显示异常示例admin
- $formkit: radio
name: enable_color_character
label: 侧边栏信息-开启彩字切换
@ -702,11 +700,6 @@ spec:
label: 侧边栏最近文章-展示文章数量
placeholder: 请输入数量数值
value: 5
- $formkit: text
name: recent_comments_num
label: 侧边栏最近评论-展示评论数量
placeholder: 请输入数量数值
value: 5
- $formkit: radio
name: categories_more
label: 侧边栏分类-显示”更多”按钮

View File

@ -1098,11 +1098,15 @@ table td, table th {
}
&-searchicon {
display: none;
cursor: pointer;
font-size: 23px !important;
font-size: 18px !important;
color: var(--main);
margin-left: auto;
span {
margin-left: 4px;
font-size: 15px;
}
}
&-mask {
@ -3910,7 +3914,11 @@ button.swiper-pagination-bullet {
padding: 0 0.75rem;
.navbar-searchicon {
display: block;
font-size: 23px!important;
span {
display: none;
}
}
.navbar-search {

View File

@ -6,7 +6,6 @@ const commonContext = {
initWidget() {
const $columnRight = $('.columns .column-right')
const $columnRightShadow = $('.columns .column-right-shadow')
$('.widget.recent-comments .reply .link').html((i, html) => Utils.renderedEmojiHtml(html))
// 实现将右边widget拷贝的左边
if ($columnRight.length && $columnRightShadow.length && !$columnRightShadow[0].children.length) {
for (const child of $columnRight[0].children) {
@ -14,36 +13,6 @@ const commonContext = {
}
}
},
/* 初始化悬浮操作按钮 */
initActions() {
const $bulletScreen = $('.actions>.bullet-screen')
if (localStorage.getItem('stop-bullet-screen') === 'true') {
$bulletScreen.addClass('stop-bullet-screen')
}
if ($('halo-comment[bullet-screen]').length !== 0) {
$bulletScreen.removeClass('is-hidden-all')
}
const applyStopBulletScreen = (stopBulletScreenValue) => {
$('halo-comment[bullet-screen]').each(function () {
const shadowDom = this.shadowRoot.getElementById('halo-comment')
if (stopBulletScreenValue) {
$(shadowDom).attr('stop-bullet-screen', 'true')
} else {
$(shadowDom).removeAttr('stop-bullet-screen')
}
})
if (stopBulletScreenValue) {
$bulletScreen.addClass('stop-bullet-screen')
} else {
$bulletScreen.removeClass('stop-bullet-screen')
}
localStorage.setItem('stop-bullet-screen', stopBulletScreenValue)
}
$bulletScreen.on('click', () => {
let stopBulletScreen = localStorage.getItem('stop-bullet-screen') || false
applyStopBulletScreen(stopBulletScreen.toString() !== 'true')
})
},
/* 初始化目录和公告模块 */
initTocAndNotice() {
const {pathname} = location
@ -106,10 +75,6 @@ const commonContext = {
} else {
document.documentElement.classList.remove('night')
}
$('halo-comment').each(function () {
const shadowDom = this.shadowRoot.getElementById('halo-comment')
$(shadowDom)[`${isNightValue ? 'add' : 'remove'}Class`]('night')
})
localStorage.setItem('night', isNightValue)
isNight = isNightValue
}
@ -201,17 +166,6 @@ const commonContext = {
}
document.addEventListener('scroll', handleScroll)
},
/* 搜索框弹窗 */
searchDialog() {
const $result = $('.navbar-search .result')
$('.navbar-search .input').on('click', function (e) {
e.stopPropagation()
$result.addClass('active')
})
$(document).on('click', function () {
$result.removeClass('active')
})
},
/* 小屏幕伸缩侧边栏,包含导航或者目录 */
drawerMobile() {
$('.navbar-slideicon').on('click', function (e) {
@ -257,30 +211,6 @@ const commonContext = {
$('body, html').animate({scrollTop: 0}, 400)
})
},
/* 小屏幕搜索框 */
searchMobile() {
$('.navbar-searchicon').on('click', function (e) {
e.stopPropagation()
/* 关闭侧边栏 */
$('.navbar-slideout').removeClass('active')
/* 处理开启关闭状态 */
const $html = $('html')
const $mask = $('.navbar-mask')
const $above = $('.navbar-above')
const $search_out = $('.navbar-searchout')
if ($search_out.hasClass('active')) {
$html.removeClass('disable-scroll')
$mask.removeClass('active slideout')
$search_out.removeClass('active')
$above.removeClass('solid')
} else {
$html.addClass('disable-scroll')
$mask.addClass('active')
$above.addClass('solid')
$search_out.addClass('active')
}
})
},
/* 点击遮罩层关闭 */
maskClose() {
$('.navbar-mask')

View File

@ -8,16 +8,8 @@ const createSerialNumber = () => {
console.log(`sn = ${serialNumber}`)
return serialNumber
}
const $bulletScreen = $('.actions>.bullet-screen')
// pjax请求时进行界面预处理
const initPjax = () => {
/* 重新加载悬浮导航按钮 */
if ($('halo-comment[bullet-screen]').length === 0) {
$bulletScreen.addClass('is-hidden-all')
} else {
$bulletScreen.removeClass('is-hidden-all')
}
}
const computeScrollTop = (target) => {
@ -173,12 +165,8 @@ $(document).on('pjax:success', async function (event, data, status, xhr, options
}
console.log('全部处理完成')
if (window.pjaxSerialNumber !== serialNumber) return
/* 初始化日志界面 */
window.journalPjax && window.journalPjax(serialNumber)
/* 初始化文章界面 */
window.postPjax && window.postPjax(serialNumber)
/* 初始化相册界面 */
window.photoPjax && window.photoPjax(serialNumber)
/* 初始化轮播 */
commonContext.initCarousel()
/* 加载主动推送或统计脚本 */

File diff suppressed because one or more lines are too long

View File

@ -1,103 +1,3 @@
class Emoji {
constructor(name, fileName) {
this.name = name
this.fileName = fileName
}
}
const emojiData = [
new Emoji('呵呵', 'hehe'),
new Emoji('哈哈', 'haha'),
new Emoji('吐舌', 'tushe'),
new Emoji('啊', 'a'),
new Emoji('酷', 'ku'),
new Emoji('怒', 'nu'),
new Emoji('开心', 'kaixin'),
new Emoji('汗', 'han'),
new Emoji('泪', 'lei'),
new Emoji('黑线', 'heixian'),
new Emoji('鄙视', 'bishi'),
new Emoji('不高兴', 'bugaoxing'),
new Emoji('真棒', 'zhenbang'),
new Emoji('钱', 'qian'),
new Emoji('疑问', 'yiwen'),
new Emoji('阴险', 'yingxiang'),
new Emoji('吐', 'tu'),
new Emoji('咦', 'yi'),
new Emoji('委屈', 'weiqu'),
new Emoji('花心', 'huaxin'),
new Emoji('呼~', 'hu'),
new Emoji('笑眼', 'xiaoyan'),
new Emoji('冷', 'len'),
new Emoji('太开心', 'taikaixin'),
new Emoji('滑稽', 'huaji'),
new Emoji('勉强', 'mianqiang'),
new Emoji('狂汗', 'kuanhan'),
new Emoji('乖', 'guai'),
new Emoji('睡觉', 'shuijiao'),
new Emoji('惊哭', 'jingku'),
new Emoji('生气', 'shengqi'),
new Emoji('惊讶', 'jingya'),
new Emoji('喷', 'pen'),
new Emoji('突然兴奋', 'turanxingfen'),
new Emoji('挖鼻', 'wabi'),
new Emoji('摊手', 'tanshou'),
new Emoji('捂嘴笑', 'wuzuixiao'),
new Emoji('喝酒', 'hejiu'),
new Emoji('犀利', 'xili'),
new Emoji('懒得理', 'landeli'),
new Emoji('炸药', 'zhayao'),
new Emoji('吃瓜', 'chigua'),
new Emoji('小乖', 'xiaoguai'),
new Emoji('你懂的', 'nidongde'),
new Emoji('嘿嘿嘿', 'heiheihei'),
new Emoji('欢呼', 'huanhu'),
new Emoji('笑尿', 'xiaoniao'),
new Emoji('酸爽', 'suanshuang'),
new Emoji('紧张', 'jinzhang'),
new Emoji('暗中观察', 'anzhongguancha'),
new Emoji('小红脸', 'xiaohonglian'),
new Emoji('呀咩爹', 'yamiedie'),
new Emoji('微微一笑', 'weiweiyixiao'),
new Emoji('what', 'what'),
new Emoji('托腮', 'tuosai'),
new Emoji('噗', 'pu'),
new Emoji('困成狗', 'kunchenggou'),
new Emoji('柯基暗中观察', 'kejianzhongguancha'),
new Emoji('菜狗', 'caigou'),
new Emoji('老虎', 'laohu'),
new Emoji('嗷呜', 'aowu'),
new Emoji('奥特曼', 'aoteman'),
new Emoji('黑头高兴', 'heitougaoxing'),
new Emoji('黑头瞪眼', 'heitoudengyan'),
new Emoji('望远镜', 'wangyuanjing'),
new Emoji('不听', 'butin'),
new Emoji('干饭', 'ganfan'),
new Emoji('大拇指', 'damuzhi'),
new Emoji('胜利', 'shengli'),
new Emoji('haha', 'haha2'),
new Emoji('OK', 'ok'),
new Emoji('红领巾', 'honglingjin'),
new Emoji('爱心', 'aixin'),
new Emoji('心碎', 'xinsui'),
new Emoji('玫瑰', 'meigui'),
new Emoji('礼物', 'liwu'),
new Emoji('烟花', 'yanhua'),
new Emoji('彩虹', 'caihong'),
new Emoji('太阳', 'taiyang'),
new Emoji('星星月亮', 'xingxingyueliang'),
new Emoji('蛋糕', 'dangao'),
new Emoji('茶杯', 'chabei'),
new Emoji('香蕉', 'xiangjiao'),
new Emoji('便便', 'bianbian'),
new Emoji('药丸', 'yaowan'),
new Emoji('钱币', 'qianbi'),
new Emoji('蜡烛', 'lazhu'),
new Emoji('沙发', 'shafa'),
new Emoji('音乐', 'yinyue'),
new Emoji('灯泡', 'dengpao'),
new Emoji('手纸', 'shouzhi')
]
const Utils = {
/**
* 是否移动设备
@ -365,19 +265,6 @@ const Utils = {
}
requestId = window.requestAnimationFrame(step)
},
/**
* 表情替换
* @param html
* @returns {*}
*/
renderedEmojiHtml(html) {
for (let emoji of emojiData) {
let name = emoji.name
let img = `<img class="dream-emoji" src="/themes/dream/source/lib/halo-comment@1.1.2/assets/emoji/${emoji.fileName}.png" alt="${name}"/>`
html = html.replace(new RegExp(`\\[/${name}\\]`, 'gm'), img)
}
return html
}
}
window.Utils = Utils

View File

@ -1,40 +1,36 @@
<#include "templates/layout_pjax.ftl">
<@layout title="归档 - ${blog_title!}" canonical="${archives_url!}">
<#if (archives)?? && archives?size gt 0>
<#list archives as archive>
<div class="card card-content">
<div class="timeline-title">${archive.year?c}</div>
<div class="timeline">
<#list archive.posts as post>
<article class="media">
<#if post.thumbnail?? && post.thumbnail!=''>
<a href="${post.fullPath}" class="media-left">
<img class="not-gallery" src="${post.thumbnail!}" alt="${post.title!}">
</a>
</#if>
<div class="media-content">
<time datetime="${post.createTime!}">${post.createTime?string('yyyy-MM-dd')}</time>
<a href="${post.fullPath!}" class="title has-link-grey">${post.title!}</a>
<#if post.categories?? && post.categories?size gt 0>
<p>
<#list post.categories as category>
<a class="has-link-grey"
href="${category.fullPath!}">${category.name!}</a>&nbsp;
</#list>
</p>
</#if>
</div>
</article>
</#list>
</div>
</div>
</#list>
<#include "templates/main/pagination.ftl">
<@pagination method="archives" datas=posts display="${settings.page_number!5}" />
<#else>
<div class="card card-empty">
<i class="fa fa-inbox"></i>
还没有发表过文章,回<a href="${context!}">主页</a>看看吧
<!DOCTYPE html>
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${'归档 - ' + site.title},
canonical = @{/archives}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(archives)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有发表过文章,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div th:each="archive : ${archives.items}" class="card card-content">
<div class="timeline-title" th:text="${archive.year}"></div>
<div class="timeline">
<th:block th:each="months : ${archive.months}">
<article th:each="post : ${months.posts}" class="media">
<a th:if="${!#strings.isEmpty(post.spec.cover)}" th:href="${post.status.permalink}" class="media-left">
<img class="not-gallery" th:src="${post.spec.cover}" th:alt="${post.spec.title}">
</a>
<div class="media-content">
<time th:text="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd')}"></time>
<a th:href="${post.status.permalink}" class="title has-link-grey" th:text="${post.spec.title}"></a>
<p th:if="${!#lists.isEmpty(post.categories)}">
<a class="has-link-grey"
th:each="cy : ${post.categories}"
th:href="${cy.status.permalink}"
th:text="${cy.spec.displayName}"></a>&nbsp;
</p>
</div>
</article>
</th:block>
</div>
</#if>
</@layout>
</div>
<th:block th:replace="~{main/pagination :: pagination (${archives}, '/archives')}"/>
</th:block>
</th:block>
</th:block>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(()=>{const r=new Set($('link[href*=".css"]').map((o,e)=>$(e).attr("href")).get()),c=new Set($('script[src*=".js"]').map((o,e)=>$(e).attr("src")).get()),e=()=>{var o=(new Date).getTime();return window.pjaxSerialNumber=o,console.log("sn = "+o),o},o=$(".actions>.bullet-screen"),i=()=>{0===$("halo-comment[bullet-screen]").length?o.addClass("is-hidden-all"):o.removeClass("is-hidden-all")},m=(e,n,t)=>{if(n>=e.length)t&&t();else{let o=$(e[n]).attr("src");c.has(o)?m(e,n+1,t):(console.log((t?"同步":"异步")+"顺序加载js "+o),Utils.cachedScript(o).done(function(){console.log((t?"同步":"异步")+"顺序加载js完成 "+o),c.add(o),window.DProgress&&DProgress.inc(),m(e,n+1,t)}).fail(function(){console.log((t?"同步":"异步")+"顺序加载js失败 "+o),m(e,n+1,t)}))}};$(document).on("click","a[target!=_blank][href]:not(data-not-pjax)",o=>{$.pjax.click(o,".column-main",{scrollTo:"/"!==o.currentTarget.pathname&&0!==$(".banner").length?window.innerHeight/4:0,fragment:".column-main",serialNumber:e(),timeout:8e3})}),$(document).on("submit","form[data-pjax]",function(o){$.pjax.submit(o,".column-main",{scrollTo:0,fragment:".column-main",serialNumber:e(),timeout:8e3})}),$(document).on("pjax:click",function(o,e){console.log("------------------------"),console.log("pjax:click sn = "+e.serialNumber)}),$(document).on("pjax:beforeSend",function(o,e,n){console.log("pjax:beforeSend sn = "+n.serialNumber),$("html").addClass("pjax-loading")}),$(document).on("pjax:start",function(o,e,n){console.log("pjax:start sn = "+n.serialNumber),window.DProgress&&DProgress.start(),$(".pjax-close").remove()}),$(document).on("pjax:send",function(o,e,n){console.log("pjax:send sn = "+n.serialNumber)}),$(document).on("pjax:clicked",function(o,e){console.log("pjax:clicked sn = "+e.serialNumber)}),$(document).on("pjax:beforeReplace",function(o,e,n){console.log("pjax:beforeReplace sn = "+n.serialNumber),$(".navbar-nav .current,.panel-side-menu .current").removeClass("current"),commonContext.initNavbar(),0<$("html.disable-scroll").length&&$(".navbar-mask").trigger("click")}),$(document).on("pjax:success",async function(o,e,n,t,a){a=a.serialNumber;if(console.log("pjax:success sn = "+a),window.pjaxSerialNumber===a){commonContext.initGallery(),commonContext.initTocAndNotice(),i(),$("html").removeClass("pjax-loading");const s=$($.parseHTML(e,document,!0)),l=$("head");l.find("meta").remove(),l.append(s.filter("meta")),s.filter("link[data-pjax]").each(function(){let o=$(this).attr("href");r.has(o)||(l.append($(this)),console.log("加载css "+$(this).attr("href")),this.onload=function(){r.add(o),window.DProgress&&DProgress.inc(),console.log("加载css完成 "+$(this).attr("href"))})});let o=s.filter("script[data-pjax]");if(0<o.length){o.filter("[async]").each(function(){let o=$(this).attr("src");c.has(o)||(console.log("异步无序加载js "+o),Utils.cachedScript(o).done(function(){console.log("异步无序js完成 "+o),window.DProgress&&DProgress.inc(),c.add(o)}).fail(function(){console.log("异步无序js失败 "+o)}))}),new Promise(()=>{m(o.filter("[defer]"),0)});let e=o.filter(":not([async]):not([defer])");0<e.length&&await new Promise(o=>{m(e,0,o)})}console.log("全部处理完成"),window.pjaxSerialNumber===a&&(window.journalPjax&&window.journalPjax(a),window.postPjax&&window.postPjax(a),window.photoPjax&&window.photoPjax(a),commonContext.initCarousel(),commonContext.loadMaintain(),window.DProgress)&&DProgress.done()}}),$(document).on("pjax:timeout",function(o,e,n){console.log("pjax:timeout sn = "+n.serialNumber)}),$(document).on("pjax:error",function(o,e,n,t,a){console.log(`pjax:error sn = ${a.serialNumber} error `+t)}),$(document).on("pjax:complete",function(o,e,n,t){console.log("pjax:complete sn = "+t.serialNumber)}),$(document).on("pjax:end",function(o,e,n){console.log("pjax:end sn = "+n.serialNumber),null==e&&(commonContext.initTocAndNotice(),i(),commonContext.initCarousel(),window.DProgress&&DProgress.done(),$("html").removeClass("pjax-loading"))}),$(document).on("pjax:popstate",function(){console.log("pjax:popstate")})})();
(()=>{const l=new Set($('link[href*=".css"]').map((o,e)=>$(e).attr("href")).get()),c=new Set($('script[src*=".js"]').map((o,e)=>$(e).attr("src")).get()),e=()=>{var o=(new Date).getTime();return window.pjaxSerialNumber=o,console.log("sn = "+o),o},i=(e,n,t)=>{if(n>=e.length)t&&t();else{let o=$(e[n]).attr("src");c.has(o)?i(e,n+1,t):(console.log((t?"同步":"异步")+"顺序加载js "+o),Utils.cachedScript(o).done(function(){console.log((t?"同步":"异步")+"顺序加载js完成 "+o),c.add(o),window.DProgress&&DProgress.inc(),i(e,n+1,t)}).fail(function(){console.log((t?"同步":"异步")+"顺序加载js失败 "+o),i(e,n+1,t)}))}};$(document).on("click","a[target!=_blank][href]:not(data-not-pjax)",o=>{$.pjax.click(o,".column-main",{scrollTo:"/"!==o.currentTarget.pathname&&0!==$(".banner").length?window.innerHeight/4:0,fragment:".column-main",serialNumber:e(),timeout:8e3})}),$(document).on("submit","form[data-pjax]",function(o){$.pjax.submit(o,".column-main",{scrollTo:0,fragment:".column-main",serialNumber:e(),timeout:8e3})}),$(document).on("pjax:click",function(o,e){console.log("------------------------"),console.log("pjax:click sn = "+e.serialNumber)}),$(document).on("pjax:beforeSend",function(o,e,n){console.log("pjax:beforeSend sn = "+n.serialNumber),$("html").addClass("pjax-loading")}),$(document).on("pjax:start",function(o,e,n){console.log("pjax:start sn = "+n.serialNumber),window.DProgress&&DProgress.start(),$(".pjax-close").remove()}),$(document).on("pjax:send",function(o,e,n){console.log("pjax:send sn = "+n.serialNumber)}),$(document).on("pjax:clicked",function(o,e){console.log("pjax:clicked sn = "+e.serialNumber)}),$(document).on("pjax:beforeReplace",function(o,e,n){console.log("pjax:beforeReplace sn = "+n.serialNumber),$(".navbar-nav .current,.panel-side-menu .current").removeClass("current"),commonContext.initNavbar(),0<$("html.disable-scroll").length&&$(".navbar-mask").trigger("click")}),$(document).on("pjax:success",async function(o,e,n,t,s){s=s.serialNumber;if(console.log("pjax:success sn = "+s),window.pjaxSerialNumber===s){commonContext.initGallery(),commonContext.initTocAndNotice(),$("html").removeClass("pjax-loading");const a=$($.parseHTML(e,document,!0)),r=$("head");r.find("meta").remove(),r.append(a.filter("meta")),a.filter("link[data-pjax]").each(function(){let o=$(this).attr("href");l.has(o)||(r.append($(this)),console.log("加载css "+$(this).attr("href")),this.onload=function(){l.add(o),window.DProgress&&DProgress.inc(),console.log("加载css完成 "+$(this).attr("href"))})});let o=a.filter("script[data-pjax]");if(0<o.length){o.filter("[async]").each(function(){let o=$(this).attr("src");c.has(o)||(console.log("异步无序加载js "+o),Utils.cachedScript(o).done(function(){console.log("异步无序js完成 "+o),window.DProgress&&DProgress.inc(),c.add(o)}).fail(function(){console.log("异步无序js失败 "+o)}))}),new Promise(()=>{i(o.filter("[defer]"),0)});let e=o.filter(":not([async]):not([defer])");0<e.length&&await new Promise(o=>{i(e,0,o)})}console.log("全部处理完成"),window.pjaxSerialNumber===s&&(window.postPjax&&window.postPjax(s),commonContext.initCarousel(),commonContext.loadMaintain(),window.DProgress)&&DProgress.done()}}),$(document).on("pjax:timeout",function(o,e,n){console.log("pjax:timeout sn = "+n.serialNumber)}),$(document).on("pjax:error",function(o,e,n,t,s){console.log(`pjax:error sn = ${s.serialNumber} error `+t)}),$(document).on("pjax:complete",function(o,e,n,t){console.log("pjax:complete sn = "+t.serialNumber)}),$(document).on("pjax:end",function(o,e,n){console.log("pjax:end sn = "+n.serialNumber),null==e&&(commonContext.initTocAndNotice(),commonContext.initCarousel(),window.DProgress&&DProgress.done(),$("html").removeClass("pjax-loading"))}),$(document).on("pjax:popstate",function(){console.log("pjax:popstate")})})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,39 +1,31 @@
<#include "templates/layout_pjax.ftl">
<#macro categoriesTree categories>
<#list categories as category>
<li>
<a class="level is-marginless" href="${category.fullPath!}">
<span class="level-item">${category.name}</span>
<span class="level-item tag">${postCounts[category.id?c]!}</span>
</a>
<#if category.children?? && category.children?size gt 0>
<ul>
<@categoriesTree category.children/>
</ul>
</#if>
</li>
</#list>
</#macro>
<@layout title="分类 - ${blog_title!}" canonical="${categories_url!}">
<#assign postCounts = {}>
<@categoryTag method="list">
<#list categories as category>
<#assign postCounts += {category.id: category.postCount}>
</#list>
</@categoryTag>
<@categoryTag method="tree">
<#if categories?? && categories?size gt 0>
<div class="card card-content">
<div class="card-tab"><div>文章分类</div></div>
<ul class="menu-list">
<@categoriesTree categories/>
</ul>
</div>
<#else>
<div class="card card-empty">
<i class="fa fa-inbox"></i>
还没有创建过分类,回<a href="${context!}">主页</a>看看吧
</div>
</#if>
</@categoryTag>
</@layout>
<!DOCTYPE html>
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = '分类 - ' + ${site.title}, canonical = @{/categories}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(categories)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有创建过分类,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div class="card card-content">
<div class="card-tab">
<div>文章分类</div>
</div>
<ul class="menu-list">
<th:block th:replace="~{:: categories (${categories})}"/>
</ul>
</div>
</th:block>
</th:block>
<th:block th:fragment="categories (categories)">
<li th:each="category : ${categories}">
<a class="level is-marginless" th:href="${category.status.permalink}">
<span class="level-item" th:text="${category.spec.displayName}"></span>
<span class="level-item tag" th:text="${category.status.postCount}"></span>
</a>
<ul th:if="${!#lists.isEmpty(category.children)}">
<th:block th:replace="~{:: categories (category.children)}"/>
</ul>
</li>
</th:block>
</th:block>

View File

@ -1,21 +1,21 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = ${'分类:' + category.spec.displayName + ' - ' +site.title},
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${'分类:' + category.spec.displayName + ' - ' +site.title},
canonical = ${category.status.permalink}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
该分类下没有文章,回<a th:href="${site.url}">主页</a>看看吧
<i class="fa fa-inbox"></i>
该分类下没有文章,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div class="card card-content main-title">
<ul class="breadcrumb">
<li><a th:href="@{/categories}"><i class="fa fa-th-large"></i>分类</a></li>
<li th:text="${category.spec.displayName}"></li>
</ul>
</div>
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, false)}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, ${category.status.permalink})}"/>
<div class="card card-content main-title">
<ul class="breadcrumb">
<li><a th:href="@{/categories}"><i class="fa fa-th-large"></i>分类</a></li>
<li th:text="${category.spec.displayName}"></li>
</ul>
</div>
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, false)}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, ${category.status.permalink})}"/>
</th:block>
</th:block>
</th:block>
</html>

View File

@ -1,6 +1,6 @@
<head xmlns:th="https://www.thymeleaf.org" th:fragment="head"
th:with="description=${isPost ? post != null ? post.spec.excerpt.raw : singlePage.spec.excerpt.raw : site.seo.description}">
<title th:text="${title}"></title>
<title th:text="${title + (#strings.isEmpty(site.subtitle) ? '' : '|' + site.subtitle)}"></title>
<script th:if="${(theme.config.enhance.enable_sw != 'false')}" th:src="${(theme.config.enhance.enable_sw == 'uninstall')? #theme.assets('/assets/js/sw.min.js') + '?mew=0.0.1' : '/sw.min.js?mew=0.0.1' + theme.config.enhance.enable_sw}"></script>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

View File

@ -1,4 +1,4 @@
<html xmlns:th="https://www.thymeleaf.org"
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:fragment="layout (title, canonical, content, isPost)">
<th:block th:if="${!#strings.equals('',param._pjax)}">
<th:block th:replace="~{common/head :: head}"/>
@ -9,7 +9,9 @@
<th:block th:replace="~{common/scripts}"/>
</body>
</th:block>
<th:block th:unless="${!#strings.equals('',param._pjax)}">
<th:block th:unless="${!#strings.equals('',param._pjax)}"
th:with="stats = ${siteStatsFinder.getStats()},
contributor = ${contributorFinder.getContributor(theme.config.sidebar.metadata_name)}">
<th:block th:replace="~{common/head :: head}"/>
<body>
<th:block th:replace="~{common/navbar}"/>
@ -20,12 +22,14 @@
<div th:class="${theme.config.basic_style.sidebar_column != 'all' ? 'container two-column' : 'container' }">
<div class="columns">
<div class="column column-main">
<th:block th:insert="${content}"/>
<th:block th:replace="${content}"/>
</div>
<th:block th:if="${theme.config.basic_style.sidebar_column!='only-right' && theme.config.basic_style.sidebar_column!='module-left'}">
<th:block
th:if="${theme.config.basic_style.sidebar_column!='only-right' && theme.config.basic_style.sidebar_column!='module-left'}">
<th:block th:replace="~{common/widget :: widget('left')}"/>
</th:block>
<th:block th:if="${theme.config.basic_style.sidebar_column!='only-left' && theme.config.basic_style.sidebar_column!='module-right'}">
<th:block
th:if="${theme.config.basic_style.sidebar_column!='only-left' && theme.config.basic_style.sidebar_column!='module-right'}">
<th:block th:replace="~{common/widget :: widget('right')}"/>
</th:block>
</div>

View File

@ -59,120 +59,91 @@
</div>
</th:block>
</nav>
<!-- <form data-pjax class="navbar-search" method="get" action="/search">-->
<!-- <input maxlength="16" autocomplete="off" placeholder="搜索内容..." name="keyword" value class="input" type="text">-->
<!-- <button type="submit" class="submit" aria-label="搜索按钮"><i class="fa fa-search"></i></button>-->
<!-- <span class="icon"></span>-->
<!-- <@postTag method="latest" top="5">-->
<!-- <nav class="result">-->
<!-- <#list posts as post>-->
<!-- <a href="${post.fullPath!}" title="${post.title!}" class="item">-->
<!-- <span class="sort">${post_index+1}</span>-->
<!-- <span class="text">${post.title!}</span>-->
<!-- </a>-->
<!-- </#list>-->
<!-- </nav>-->
<!-- </@postTag>-->
<!-- </form>-->
<i th:if="${pluginFinder.available('PluginSearchWidget')}" class="fa fa-search navbar-searchicon" href="javascript:SearchWidget.open();"></i>
<i th:if="${pluginFinder.available('PluginSearchWidget')}" class="fa fa-search navbar-searchicon" onclick="javascript:SearchWidget.open();"><span>搜索</span></i>
</div>
</div>
<!-- <#&#45;&#45; mobile菜单 &ndash;&gt;-->
<!-- <div class="navbar-slideout">-->
<!-- <div class="navbar-slideout-wrap">-->
<!-- <div class="navbar-slideout-author">-->
<!-- <img width="50" height="50" src="${user.avatar!}" class="avatar" alt="${user.nickname!}"/>-->
<!-- <div class="info">-->
<!-- <a class="link" target="_blank" rel="noopener noreferrer nofollow">${user.nickname!}</a>-->
<!-- <p class="motto">${user.description!'一句话介绍自己吧!'}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <ul class="navbar-slideout-menu">-->
<!-- <li class="item">-->
<!-- <i class="fa fa-pencil-square-o"></i>-->
<!-- <@postTag method="count"><span>累计撰写 <strong>${count!"0"}</strong> 篇文章</span></@postTag>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <i class="fa fa-tags"></i>-->
<!-- <@tagTag method="count"><span>累计创建 <strong>${count!"0"}</strong> 个标签</span></@tagTag>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <i class="fa fa-commenting-o"></i>-->
<!-- <@commentTag method="count"><span>累计收到 <strong>${count!"0"}</strong> 条评论</span></@commentTag>-->
<!-- </li>-->
<!-- </ul>-->
<!-- <ul class="navbar-slideout-menu not-toc">-->
<!-- <li>-->
<!-- <a class="link panel" href="#" rel="nofollow">-->
<!-- <span>导航</span>-->
<!-- <i class="fa fa-angle-right"></i>-->
<!-- </a>-->
<!-- <ul class="slides panel-body panel-side-menu">-->
<!-- <@menuTag method="tree">-->
<!-- <#list menus?sort_by('priority') as menu>-->
<!-- <#if menu.children?? && menu.children?size gt 0>-->
<!-- <#if menu.name?default('')?starts_with('#hide') != true>-->
<!-- <li>-->
<!-- <div class="link panel">-->
<!-- <a href="${menu.url!}" title="${menu.name!}">${menu.name!}</a>-->
<!-- <i class="fa fa-angle-right"></i>-->
<!-- </div>-->
<!-- <ul class="slides panel-body">-->
<!-- <#if menu.children?? && menu.children?size gt 0>-->
<!-- <#list menu.children?sort_by('priority') as child>-->
<!-- <#if child.children?? && child.children?size gt 0>-->
<!-- <#if child.name?default('')?starts_with('#hide') != true>-->
<!-- <li>-->
<!-- <div class="link panel">-->
<!-- <a href="${child.url!}" title="${child.name!}">${child.name!}</a>-->
<!-- <i class="fa fa-angle-right"></i>-->
<!-- </div>-->
<!-- <ul class="slides panel-body">-->
<!-- <#list child.children?sort_by('priority') as child1>-->
<!-- <#if child1.name?default('')?starts_with('#hide') != true>-->
<!-- <li>-->
<!-- <a class="link" href="${child1.url!}" title="${child1.name!}">${child1.name!}</a>-->
<!-- </li>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </ul>-->
<!-- </li>-->
<!-- </#if>-->
<!-- <#else>-->
<!-- <#if child.name?default('')?starts_with('#hide') != true>-->
<!-- <li>-->
<!-- <a class="link" href="${child.url!}" title="${child.name!}">${child.name!}</a>-->
<!-- </li>-->
<!-- </#if>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </#if>-->
<!-- </ul>-->
<!-- </li>-->
<!-- </#if>-->
<!-- <#else>-->
<!-- <#if menu.name?default('')?starts_with('#hide') != true>-->
<!-- <li>-->
<!-- <a class="link" href="${menu.url!}" title="${menu.name!}">${menu.name!}</a>-->
<!-- </li>-->
<!-- </#if>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </@menuTag>-->
<!-- </ul>-->
<!-- </li>-->
<!-- </ul>-->
<!-- <#if settings.drawer_toc!true>-->
<!-- <ul class="navbar-slideout-menu is-toc">-->
<!-- <a class="link in" href="#" rel="nofollow"><span>目录</span></a>-->
<!-- <div class="toc-content">-->
<!-- </div>-->
<!-- </ul>-->
<!-- </#if>-->
<!-- </div>-->
<!-- </div>-->
<#-- mobile菜单 -->
<div class="navbar-slideout">
<div class="navbar-slideout-wrap">
<div class="navbar-slideout-author">
<img width="50" height="50" th:src="${contributor.avatar}" th:alt="${contributor.displayName}" class="avatar"/>
<div class="info">
<a class="link" target="_blank" rel="noopener noreferrer nofollow" th:text="${contributor.displayName}"></a>
<p class="motto" th:text="${contributor.bio}"></p>
</div>
</div>
<ul class="navbar-slideout-menu">
<li class="item">
<i class="fa fa-pencil-square-o"></i>
<span>累计撰写 <strong th:text="${stats.post}"></strong> 篇文章</span>
</li>
<li class="item">
<i class="fa fa-tags"></i>
<span>累计创建 <strong th:text="${stats.category}"></strong> 个分类</span>
</li>
<li class="item">
<i class="fa fa-commenting-o"></i>
<span>累计收到 <strong th:text="${stats.comment}"></strong> 条评论</span>
</li>
</ul>
<ul class="navbar-slideout-menu not-toc">
<li>
<a class="link panel" href="#" rel="nofollow">
<span>导航</span>
<i class="fa fa-angle-right"></i>
</a>
<ul class="slides panel-body panel-side-menu">
<li th:each="menuItem : ${menuFinder.getPrimary().menuItems}">
<a class="link"
th:if="${#lists.isEmpty(menuItem.children)}"
th:href="${menuItem.status.href}"
th:title="${menuItem.status.displayName}"
th:text="${menuItem.status.displayName}"></a>
<th:block th:unless="${#lists.isEmpty(menuItem.children)}">
<div class="link panel">
<a th:href="${menuItem.status.href}"
th:title="${menuItem.status.displayName}"
th:text="${menuItem.status.displayName}"></a>
<i class="fa fa-angle-right"></i>
</div>
<ul class="slides panel-body">
<li th:each="dropdown : ${menuItem.children}">
<a class="link"
th:if="${#lists.isEmpty(dropdown.children)}"
th:href="${dropdown.status.href}"
th:title="${dropdown.status.displayName}"
th:text="${dropdown.status.displayName}"></a>
<th:block th:unless="${#lists.isEmpty(dropdown.children)}">
<div class="link panel">
<a th:href="${dropdown.status.href}"
th:title="${dropdown.status.displayName}"
th:text="${dropdown.status.displayName}"></a>
<i class="fa fa-angle-right"></i>
</div>
<ul class="slides panel-body">
<li th:each="dropdownChild : ${dropdown.children}">
<a class="link"
th:href="${dropdownChild.status.href}"
th:title="${dropdownChild.status.displayName}"
th:text="${dropdownChild.status.displayName}"></a>
</li>
</ul>
</th:block>
</li>
</ul>
</th:block>
</li>
</ul>
</li>
</ul>
<ul th:if="${theme.config.basic_style.drawer_toc}" class="navbar-slideout-menu is-toc">
<a class="link in" href="#" rel="nofollow"><span>目录</span></a>
<div class="toc-content">
</div>
</ul>
</div>
</div>
<div class="navbar-mask"></div>
</header>

View File

@ -1,5 +1,6 @@
<th:block xmlns:th="https://www.thymeleaf.org">
<script th:src="@{/assets/js/utils.min.js(mew=${theme.spec.version})}"></script>
<script th:src="@{/assets/js/btoc.min.js(mew=${theme.spec.version})}"></script>
<!--<#if is_carousel??>-->
<!-- <script data-pjax th:src="@{/assets/lib/swiper@8.4.6/swiper-bundle.min.js}"></script>-->
<!--</#if>-->

View File

@ -1,14 +1,98 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = ${site.title}, canonical = ${site.url}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有发表过文章
</div>
<th:block th:unless="${isEmpty}">
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, ${posts.first})}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, '/index')}"/>
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${site.title}, canonical = ${site.url}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有发表过文章
</div>
<th:block th:unless="${isEmpty}">
<th:block th:replace="~{::firstIndex}"/>
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, ${posts.first})}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, '/index')}"/>
</th:block>
</th:block>
<th:block th:if="${posts.first}" th:fragment="firstIndex">
<th:block th:replace="~{::carousel}"/>
<div th:if="${!#strings.isEmpty(theme.config.basic_info.index_inform)}" class="card tips brightness"
th:text="${theme.config.basic_info.index_inform}"></div>
</th:block>
<th:block th:fragment="carousel">
</th:block>
</th:block>
</html>
<!-- <#if is_first_index!false>-->
<!-- <#local carousel_content>-->
<!-- <#list posts as post>-->
<!-- <#if post.topPriority!=1>-->
<!-- <#break>-->
<!-- </#if>-->
<!-- <#if !post.metas?? || (post.metas.index_carousel!'false')=='false'>-->
<!-- <#continue>-->
<!-- </#if>-->
<!-- <#local thumbnail = (post.thumbnail?? && post.thumbnail!='')?then(post.thumbnail!, (settings.default_thumbnail?? && settings.default_thumbnail!='')?then(settings.default_thumbnail + settings.default_thumbnail?contains('?')?then("&","?") + "postId=" + post.id?c, ''))>-->
<!-- <#if thumbnail != ''>-->
<!-- <a class="swiper-slide bg-shadow cover-image" style="background-image: url(${thumbnail})" href="${post.fullPath!}">-->
<!-- <div class="swiper-slide-details" data-swiper-parallax="200" data-swiper-parallax-duration="600">-->
<!-- <p class="swiper-slide-details-title">${post.title!}</p>-->
<!-- <ul class="breadcrumb">-->
<!-- <li><@global.timeline datetime=post.createTime/></li>-->
<!-- <li><i class="fa fa-eye"></i>${post.visits?c}</li>-->
<!-- <#if !post.disallowComment!false>-->
<!-- <li><i class="fa fa-comments-o"></i>${post.commentCount?c}</li></#if>-->
<!-- <li><i class="fa fa-thumbs-o-up"></i>${post.likes?c}</li>-->
<!-- <#local heat= (24+post.visits*0.1+post.likes*2+post.commentCount*3) />-->
<!-- <#local heatColor= '#'+(heat < 37)?string('ffa87e',(heat < 120)?string('fb734a','e0081c')) />-->
<!-- <li style="color: ${heatColor}">${heat}℃</li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </a>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </#local>-->
<!-- <#if settings.sidebar_column=='module-left' || settings.sidebar_column=='module-right'>-->
<!-- <#if settings.module_links?? && settings.module_links?trim != ''>-->
<!-- <#local module_links=settings.module_links?split('\n')>-->
<!-- <#else>-->
<!-- <#local module_links=[]>-->
<!-- <#list 0..1 as i>-->
<!-- <#local post=posts[i]>-->
<!-- <#local module_links=module_links+["推荐|${post.title!}|false|${post.thumbnail!}|${post.fullPath!}"]>-->
<!-- </#list>-->
<!-- </#if>-->
<!-- <div class="model model-index">-->
<!-- <div class="card widget swiper">-->
<!-- <div class="swiper-wrapper">${carousel_content}</div>-->
<!-- <div class="swiper-pagination"></div>-->
<!-- <div class="swiper-button-prev"></div>-->
<!-- <div class="swiper-button-next"></div>-->
<!-- </div>-->
<!-- <div class="model model-index-side">-->
<!-- <#list 0..1 as i>-->
<!-- <#if i &lt; module_links?size >-->
<!-- <@model_build module_links[i]/>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </div>-->
<!-- </div>-->
<!-- <#if module_links?size &gt; 2 && module_links?size&lt;=6>-->
<!-- <div class="model model-attach model-attach-${module_links?size-2}">-->
<!-- <#list 2..5 as i>-->
<!-- <#if i &lt; module_links?size >-->
<!-- <@model_build module_links[i]/>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </div>-->
<!-- </#if>-->
<!-- <#assign is_carousel=true />-->
<!-- <#elseif carousel_content != ''>-->
<!-- <div class="card widget swiper">-->
<!-- <div class="swiper-wrapper">${carousel_content}</div>-->
<!-- <div class="swiper-pagination"></div>-->
<!-- <div class="swiper-button-prev"></div>-->
<!-- <div class="swiper-button-next"></div>-->
<!-- </div>-->
<!-- <#assign is_carousel=true />-->
<!-- </#if>-->
<!-- </#if>-->

View File

@ -7,9 +7,9 @@
<span>打赏</span>
<div class="donate-list">
<ol>
<li th:if="!#strings.isEmpty(theme.config.post.donate_alipay)"><img
<li th:if="${!#strings.isEmpty(theme.config.post.donate_alipay)}"><img
th:src="${theme.config.post.donate_alipay}" alt="支付宝捐赠"></li>
<li th:if="!#strings.isEmpty(theme.config.post.donate_wechat)"><img
<li th:if="${!#strings.isEmpty(theme.config.post.donate_wechat)}"><img
th:src="${theme.config.post.donate_wechat}" alt="微信捐赠"></li>
</ol>
</div>

View File

@ -128,8 +128,7 @@
</div>
</th:block>
<th:block/>
<!--</div>-->
<!--</div>-->
<!--<#elseif thumbnail_mode == "grid">-->
<!--<div class="column-main-grid">-->
<!-- <#list post_index..(posts?size-1) as i>-->
@ -183,81 +182,5 @@
<!-- <a class="card widget brightness ${(content!='')?then('bg-shadow', '')}" ${target} ${imageUrl} ${targetUrl}>${content}<div class="tag">${tag}</div></a>-->
<!--</#macro>-->
<!--<#macro article_list posts>-->
<!-- <#if is_first_index!false>-->
<!-- <#local carousel_content>-->
<!-- <#list posts as post>-->
<!-- <#if post.topPriority!=1>-->
<!-- <#break>-->
<!-- </#if>-->
<!-- <#if !post.metas?? || (post.metas.index_carousel!'false')=='false'>-->
<!-- <#continue>-->
<!-- </#if>-->
<!-- <#local thumbnail = (post.thumbnail?? && post.thumbnail!='')?then(post.thumbnail!, (settings.default_thumbnail?? && settings.default_thumbnail!='')?then(settings.default_thumbnail + settings.default_thumbnail?contains('?')?then("&","?") + "postId=" + post.id?c, ''))>-->
<!-- <#if thumbnail != ''>-->
<!-- <a class="swiper-slide bg-shadow cover-image" style="background-image: url(${thumbnail})" href="${post.fullPath!}">-->
<!-- <div class="swiper-slide-details" data-swiper-parallax="200" data-swiper-parallax-duration="600">-->
<!-- <p class="swiper-slide-details-title">${post.title!}</p>-->
<!-- <ul class="breadcrumb">-->
<!-- <li><@global.timeline datetime=post.createTime/></li>-->
<!-- <li><i class="fa fa-eye"></i>${post.visits?c}</li>-->
<!-- <#if !post.disallowComment!false>-->
<!-- <li><i class="fa fa-comments-o"></i>${post.commentCount?c}</li></#if>-->
<!-- <li><i class="fa fa-thumbs-o-up"></i>${post.likes?c}</li>-->
<!-- <#local heat= (24+post.visits*0.1+post.likes*2+post.commentCount*3) />-->
<!-- <#local heatColor= '#'+(heat < 37)?string('ffa87e',(heat < 120)?string('fb734a','e0081c')) />-->
<!-- <li style="color: ${heatColor}">${heat}℃</li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </a>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </#local>-->
<!-- <#if settings.sidebar_column=='module-left' || settings.sidebar_column=='module-right'>-->
<!-- <#if settings.module_links?? && settings.module_links?trim != ''>-->
<!-- <#local module_links=settings.module_links?split('\n')>-->
<!-- <#else>-->
<!-- <#local module_links=[]>-->
<!-- <#list 0..1 as i>-->
<!-- <#local post=posts[i]>-->
<!-- <#local module_links=module_links+["推荐|${post.title!}|false|${post.thumbnail!}|${post.fullPath!}"]>-->
<!-- </#list>-->
<!-- </#if>-->
<!-- <div class="model model-index">-->
<!-- <div class="card widget swiper">-->
<!-- <div class="swiper-wrapper">${carousel_content}</div>-->
<!-- <div class="swiper-pagination"></div>-->
<!-- <div class="swiper-button-prev"></div>-->
<!-- <div class="swiper-button-next"></div>-->
<!-- </div>-->
<!-- <div class="model model-index-side">-->
<!-- <#list 0..1 as i>-->
<!-- <#if i &lt; module_links?size >-->
<!-- <@model_build module_links[i]/>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </div>-->
<!-- </div>-->
<!-- <#if module_links?size &gt; 2 && module_links?size&lt;=6>-->
<!-- <div class="model model-attach model-attach-${module_links?size-2}">-->
<!-- <#list 2..5 as i>-->
<!-- <#if i &lt; module_links?size >-->
<!-- <@model_build module_links[i]/>-->
<!-- </#if>-->
<!-- </#list>-->
<!-- </div>-->
<!-- </#if>-->
<!-- <#assign is_carousel=true />-->
<!-- <#elseif carousel_content != ''>-->
<!-- <div class="card widget swiper">-->
<!-- <div class="swiper-wrapper">${carousel_content}</div>-->
<!-- <div class="swiper-pagination"></div>-->
<!-- <div class="swiper-button-prev"></div>-->
<!-- <div class="swiper-button-next"></div>-->
<!-- </div>-->
<!-- <#assign is_carousel=true />-->
<!-- </#if>-->
<!-- <#if settings.index_inform?? && settings.index_inform != ''>-->
<!-- <div class="card tips brightness">${settings.index_inform}</div>-->
<!-- </#if>-->
<!-- </#if>-->
<!--</#macro>-->

View File

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = ${singlePage.spec.title + ' - ' + site.title}, canonical = ${singlePage.status.permalink}, content = ~{main/article :: article (${singlePage}, 'SinglePage')}, isPost = true)}"
th:with="enableKatex = ${!#strings.isEmpty(singlePage.metadata.annotations.get('enable_katex'))? singlePage.metadata.annotations.get('enable_katex') : theme.config.post.enable_katex},
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${singlePage.spec.title + ' - ' + site.title}, canonical = ${singlePage.status.permalink}, content = ~{main/article :: article (${singlePage}, 'SinglePage')}, isPost = true)}"
th:with="enableKatex = ${!#strings.isEmpty(singlePage.metadata.annotations.get('enable_katex'))? singlePage.metadata.annotations.get('enable_katex') : theme.config.post.enable_katex},
enableShare = ${!#strings.isEmpty(singlePage.metadata.annotations.get('enable_share'))? singlePage.metadata.annotations.get('enable_share') : theme.config.post.enable_share},
enableCopyright = ${!#strings.isEmpty(singlePage.metadata.annotations.get('enable_copyright'))? singlePage.metadata.annotations.get('enable_copyright') : theme.config.post.enable_copyright}">
</html>
</th:block>

View File

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = ${post.spec.title + ' - ' + site.title}, canonical = ${post.status.permalink}, content = ~{main/article :: article (${post}, 'Post')}, isPost = true)}"
th:with="enableKatex = ${!#strings.isEmpty(post.metadata.annotations.get('enable_katex'))? post.metadata.annotations.get('enable_katex') : theme.config.post.enable_katex},
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${post.spec.title + ' - ' + site.title}, canonical = ${post.status.permalink}, content = ~{main/article :: article (${post}, 'Post')}, isPost = true)}"
th:with="enableKatex = ${!#strings.isEmpty(post.metadata.annotations.get('enable_katex'))? post.metadata.annotations.get('enable_katex') : theme.config.post.enable_katex},
enableShare = ${!#strings.isEmpty(post.metadata.annotations.get('enable_share'))? post.metadata.annotations.get('enable_share') : theme.config.post.enable_share},
enableCopyright = ${!#strings.isEmpty(post.metadata.annotations.get('enable_copyright'))? post.metadata.annotations.get('enable_copyright') : theme.config.post.enable_copyright}">
</html>
</th:block>

View File

@ -1,21 +1,21 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = ${'标签:' + tag.spec.displayName + ' - ' +site.title},
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = ${'标签:' + tag.spec.displayName + ' - ' +site.title},
canonical = ${tag.status.permalink}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(posts)}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
该标签下没有文章,回<a th:href="${site.url}">主页</a>看看吧
<i class="fa fa-inbox"></i>
该标签下没有文章,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div class="card card-content main-title">
<ul class="breadcrumb">
<li><a th:href="@{/tags}"><i class="fa fa-tags"></i>标签</a></li>
<li th:text="${tag.spec.displayName}"></li>
</ul>
</div>
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, false)}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, ${tag.status.permalink})}"/>
<div class="card card-content main-title">
<ul class="breadcrumb">
<li><a th:href="@{/tags}"><i class="fa fa-tags"></i>标签</a></li>
<li th:text="${tag.spec.displayName}"></li>
</ul>
</div>
<th:block th:replace="~{main/article_list :: articleList (${posts.items}, false)}"/>
<th:block th:replace="~{main/pagination :: pagination (${posts}, ${tag.status.permalink})}"/>
</th:block>
</th:block>
</html>
</th:block>
</th:block>

View File

@ -1,25 +1,26 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="https://www.thymeleaf.org"
th:include="~{common/layout :: layout (title = '标签 - ' + ${site.title}, canonical = @{/tags}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content" th:with="isEmpty = ${#lists.isEmpty(tags)}, enableTagsColor = ${theme.config.page_config.enable_tags_tag_color}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有创建过标签,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div class="card card-content">
<div class="card-tab">
<div>文章标签</div>
</div>
<div class="tags-field">
<a th:each="tag : ${tags}" class="tags" th:href="${tag.status.permalink}">
<th:block xmlns:th="https://www.thymeleaf.org"
th:insert="~{common/layout :: layout (title = '标签 - ' + ${site.title}, canonical = @{/tags}, content = ~{::content}, isPost = false)}">
<th:block th:fragment="content"
th:with="isEmpty = ${#lists.isEmpty(tags)}, enableTagsColor = ${theme.config.page_config.enable_tags_tag_color}">
<div th:if="${isEmpty}" class="card card-empty">
<i class="fa fa-inbox"></i>
还没有创建过标签,回<a th:href="${site.url}">主页</a>看看吧
</div>
<th:block th:unless="${isEmpty}">
<div class="card card-content">
<div class="card-tab">
<div>文章标签</div>
</div>
<div class="tags-field">
<a th:each="tag : ${tags}" class="tags" th:href="${tag.status.permalink}">
<span class="tag" th:text="${tag.spec.displayName}"
th:style="${enableTagsColor? 'color: ' + tag.spec.color +'; background: ' + tag.spec.color +'20' : ''}"></span>
<span class="tag is-grey" th:text="${tag.postCount}"
th:style="${enableTagsColor? 'background: ' + tag.spec.color +'CC' : ''}"></span>
</a>
<span class="tag is-grey" th:text="${tag.postCount}"
th:style="${enableTagsColor? 'background: ' + tag.spec.color +'CC' : ''}"></span>
</a>
</div>
</div>
</div>
</th:block>
</th:block>
</th:block>
</html>
</th:block>

View File

@ -1,47 +1,23 @@
<#macro categoriesTree categories>
<#list categories as category>
<li>
<a class="level is-marginless" href="${category.fullPath!}">
<span class="level-item">${category.name}</span>
<span class="level-item tag">${postCounts[category.id?c]!}</span>
</a>
<#assign num=num?number-1/>
<#if num?number gt 0 && category.children?? && category.children?size gt 0>
<ul>
<@categoriesTree category.children/>
</ul>
</#if>
</li>
<#if num?number = 0>
<#break>
</#if>
</#list>
</#macro>
<#assign num= settings.categories_num!10 />
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget ' + ${hide}">
<#assign postCounts = {}>
<@categoryTag method="list">
<div class="card-title">
<i class="fa fa-th-large card-title-label"></i><span>分类</span>
<#if settings.categories_more?? && settings.categories_more== true && categories?size gt num?number>
<a class="card-more" href="${categories_url!}">更多<i class="fa fa-angle-double-right"></i></a>
</#if>
</div>
<#list categories as category>
<#assign postCounts += {category.id: category.postCount}>
</#list>
</@categoryTag>
<@categoryTag method="tree">
<#if categories?? && categories?size gt 0>
<div class="card-content">
<ul class="menu-list">
<@categoriesTree categories/>
</ul>
</div>
<#else>
<div class="card-empty">暂无分类</div>
</#if>
</@categoryTag>
th:class="'card widget ' + ${hide}"
th:with="num = ${#strings.isEmpty(theme.config.sidebar.categories_num)? 10 : T(java.lang.Integer).parseInt(theme.config.sidebar.categories_num)},
categories = ${categoryFinder.list(1,num)},
isEmpty = ${#lists.isEmpty(categories)}">
<div class="card-title">
<i class="fa fa-th-large card-title-label"></i><span>分类</span>
<a th:if="${categories.hasNext}" class="card-more" th:href="@{/categories}">更多<i
class="fa fa-angle-double-right"></i></a>
</div>
<div th:if="${isEmpty}" class="card-empty">暂无分类</div>
<div th:unless="${isEmpty}" class="card-content">
<ul class="menu-list">
<li th:each="category : ${categories}">
<a class="level is-marginless" th:href="${category.status.permalink}">
<span class="level-item" th:text="${category.spec.displayName}"></span>
<span class="level-item tag" th:text="${category.status.postCount}"></span>
</a>
</li>
</ul>
</div>
</div>

View File

@ -1,7 +1,6 @@
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget profile ' + ${hide}"
th:with="stats = ${siteStatsFinder.getStats()}, contributor = ${contributorFinder.getContributor(theme.config.sidebar.metadata_name)}">
th:class="'card widget profile ' + ${hide}">
<div class="card-content">
<nav class="level">
<div class="level-item" style="flex-direction: column;">

View File

@ -1,32 +0,0 @@
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget recent-comments ' + ${hide}">
<div class="card-title">
<i class="fa fa-commenting-o card-title-label"></i><span>最新评论</span>
</div>
<@commentTag method="latest" top="${settings.recent_comments_num!5}">
<#if comments.content?size gt 0>
<div class="card-content">
<ul class="widget-comment">
<#list comments.content as comment>
<li class="item">
<div class="user">
<img width="35" height="35" class="avatar" src="${(settings.priority_qq_avatar!false)?then(comment.avatar?replace('^.*(\\w{32}\\?)', 'https://cravatar.cn/avatar/$1', 'r'),comment.avatar!)}"
alt="${comment.author!}">
<div class="info">
<div class="author">${comment.author!}</div>
<span class="date">${comment.createTime?string("yyyy-MM-dd")}</span>
</div>
</div>
<div class="reply">
<a class="link" href="${comment.post.fullPath!}#comment-wrapper">${comment.content!}</a>
</div>
</li>
</#list>
</ul>
</div>
<#else>
<div class="card-empty">暂无评论</div>
</#if>
</@commentTag>
</div>

View File

@ -1,7 +1,7 @@
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget recent-posts ' + ${hide}"
th:with="num = ${#strings.isEmpty(theme.config.sidebar.recent_posts_num)? 5 : #numbers.sequence(theme.config.sidebar.recent_posts_num,theme.config.sidebar.recent_posts_num)[0]}, posts = ${postFinder.list(1,num)}, isEmpty = ${#lists.isEmpty(posts)}">
th:with="num = ${#strings.isEmpty(theme.config.sidebar.recent_posts_num)? 5 : T(java.lang.Integer).parseInt(theme.config.sidebar.recent_posts_num)}, posts = ${postFinder.list(1,num)}, isEmpty = ${#lists.isEmpty(posts)}">
<div class="card-title">
<i class="fa fa-history card-title-label"></i><span>最新文章</span>
</div>

View File

@ -1,7 +1,7 @@
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget tagcloud ' + ${hide}"
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 32 : #numbers.sequence(theme.config.sidebar.tags_num,theme.config.sidebar.tags_num)[0]},
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 32 : T(java.lang.Integer).parseInt(theme.config.sidebar.tags_num)},
tags = ${tagFinder.list(1,num)},
isEmpty = ${#lists.isEmpty(tags)},
enableTagsColor = ${theme.config.sidebar.enable_tag_color}">

View File

@ -1,7 +1,7 @@
<div xmlns:th="https://www.thymeleaf.org"
th:fragment="widget (hide)"
th:class="'card widget tags ' + ${hide}"
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 18 : #numbers.sequence(theme.config.sidebar.tags_num,theme.config.sidebar.tags_num)[0]},
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 18 : T(java.lang.Integer).parseInt(theme.config.sidebar.tags_num)},
tags = ${tagFinder.list(1,num)},
isEmpty = ${#lists.isEmpty(tags)},
enableTagsColor = ${theme.config.sidebar.enable_tag_color}">

View File

@ -6,5 +6,4 @@
</div>
<div class="card-content toc-content">
</div>
<script th:src="@{/assets/js/btoc.min.js(mew=${theme.spec.version})}"></script>
</div>