适配日记簿

This commit is contained in:
anian
2026-03-10 17:21:05 +08:00
parent af82232813
commit 6810791637
46 changed files with 28829 additions and 25659 deletions
+4 -4
View File
@@ -5,17 +5,17 @@
<div class="posts_cat_nav">
<ul id="cat_nav_items">
<li><a th:data="|${path}?preview-theme=theme-pix|" class="active">全部<span></span></a>
<li><a th:data="${path}" class="active">全部<span></span></a>
</li>
<li th:if="${theme.config.post.post_nav == 'category'}" th:each="categoryItem,iStat : ${categoryFinder.listAll()}">
<a th:data="|${categoryItem.status.permalink}?preview-theme=theme-pix|"
<a th:data="${categoryItem.status.permalink}"
class="">[[${categoryItem.spec.displayName}]]<span></span></a>
</li>
<li th:if="${theme.config.post.post_nav == 'custom_category'}"
th:each="category : ${theme.config.post.nav_category}">
<th:block th:with="categoryItem = ${categoryFinder.getByName(category)}">
<a th:if="${categoryItem!=null}"
th:data="|${categoryItem.status.permalink}?preview-theme=theme-pix|"
th:data="${categoryItem.status.permalink}"
class="">[[${categoryItem.spec.displayName}]]<span></span>
</a>
</th:block>
@@ -31,7 +31,7 @@
<th:block th:if="${_posts.totalPages>1}">
<div id="pagination">
<div class="post-paging" th:if="${_posts.hasNext()}"
th:with="_page = ${_posts.page+1},_path = ${path == '/archives' ? path+'?preview-theme=theme-pix&page='+_page : path +'page/'+_page+'?preview-theme=theme-pix' }">
th:with="_page = ${_posts.page+1},_path = ${path == '/archives' ? path+'?page='+_page : path +'page/'+_page }">
<a th:data="${_path}" th:text="${theme.config.base_set.site_page}"></a>
</div>
</div>
+38 -38
View File
@@ -1,39 +1,39 @@
<th:block th:fragment="home-moment(_moments,tags)">
<div class="blog_list">
<div class="blog_list_inner" uk-height-viewport="offset-top: true">
<div class="moment_cat_nav">
<ul id="cat_nav_items">
<li><a data="/moments?preview-theme=theme-pix" class="" th:classappend="${#lists.isEmpty(param.tag) ? 'active' : ''}"
><span>全部</span></a>
</li>
<li th:each="tag,iStat : ${tags}">
<a th:data="|/moments?preview-theme=theme-pix&tag=${tag.name}|" class=""
th:classappend="${#lists.contains(param.tag, tag.name) ? 'active' : ''}"
><span>[[${tag.name}]]</span></a>
</li>
</ul>
</div>
<div id="post_item" class="moment_list">
<th:block th:replace="~{macro/tpl/content-moment :: content-moment(${_moments.items})}"></th:block>
<th:block th:if="${#lists.isEmpty(_moments.items)}">
<th:block th:replace="~{macro/tpl/content-none}"/>
</th:block>
</div>
<th:block th:if="${_moments.totalPages>1}">
<div id="t_pagination">
<div class="post-paging" th:if="${_moments.hasNext()}"
th:with="tag = ${not #lists.isEmpty(param.tag) ? '?tag='+param.tag : ''},_page = ${_moments.page+1}">
<a th:data="${'/moments/page/'+_page+tag+'?preview-theme=theme-pix'}" th:text="${theme.config.base_set.site_page}"></a>
</div>
</div>
</th:block>
<div id="comment_form_reset"></div>
</div>
</div>
<th:block th:fragment="home-moment(_moments,tags)">
<div class="blog_list">
<div class="blog_list_inner" uk-height-viewport="offset-top: true">
<div class="moment_cat_nav">
<ul id="cat_nav_items">
<li><a data="/moments" class="" th:classappend="${#lists.isEmpty(param.tag) ? 'active' : ''}"
><span>全部</span></a>
</li>
<li th:each="tag,iStat : ${tags}">
<a th:data="|/moments?tag=${tag.name}|" class=""
th:classappend="${#lists.contains(param.tag, tag.name) ? 'active' : ''}"
><span>[[${tag.name}]]</span></a>
</li>
</ul>
</div>
<div id="post_item" class="moment_list">
<th:block th:replace="~{macro/tpl/content-moment :: content-moment(${_moments.items})}"></th:block>
<th:block th:if="${#lists.isEmpty(_moments.items)}">
<th:block th:replace="~{macro/tpl/content-none}"/>
</th:block>
</div>
<th:block th:if="${_moments.totalPages>1}">
<div id="t_pagination">
<div class="post-paging" th:if="${_moments.hasNext()}"
th:with="tag = ${not #lists.isEmpty(param.tag) ? '?tag='+param.tag : ''},_page = ${_moments.page+1}">
<a th:data="${'/moments/page/'+_page+tag}" th:text="${theme.config.base_set.site_page}"></a>
</div>
</div>
</th:block>
<div id="comment_form_reset"></div>
</div>
</div>
</th:block>
+51 -51
View File
@@ -1,52 +1,52 @@
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_card_content">
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 's')}"
th:data-src="${_cover}" alt="">
</a>
</div>
<div class="card_right">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]</span> - <time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block></time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="comnum"><i class="ri-chat-4-line"></i><small>[[${post.stats.comment}]]</small></span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_card_content">
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 's')}"
th:data-src="${_cover}" alt="">
</a>
</div>
<div class="card_right">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]</span> - <time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block></time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="comnum"><i class="ri-chat-4-line"></i>[[${post.stats.comment}]]</span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+49 -49
View File
@@ -1,50 +1,50 @@
<div class="uk-width-1-2@l uk-width-1-1@m">
<div th:id="${'post-'+post.metadata.name}" class="loop_content p_item grid_item uk-animation-slide-bottom-small"
th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_grid_content">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]
</span> - <time itemprop="datePublished" th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</div>
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 's')}"
th:data-src="${_cover}" alt="">
</a>
</div>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>
[[${post.stats.visit}]]
</span>
<span class="comnum"><i class="ri-chat-4-line"></i>
<small> [[${post.stats.comment}]] </small>
</span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-width-1-2@l uk-width-1-1@m">
<div th:id="${'post-'+post.metadata.name}" class="loop_content p_item grid_item uk-animation-slide-bottom-small"
th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_grid_content">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]
</span> - <time itemprop="datePublished" th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</div>
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 's')}"
th:data-src="${_cover}" alt="">
</a>
</div>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>
[[${post.stats.visit}]]
</span>
<span class="comnum"><i class="ri-chat-4-line"></i>
<small>[[${post.stats.comment}]]</small>
</span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+115 -102
View File
@@ -1,103 +1,116 @@
<th:block th:fragment="content-moment(moments)">
<div th:each="moment,iStat : ${moments}" th:id="${'post-'+moment.metadata.name}"
class="loop_content p_item moment_item">
<div class="p_item_inner">
<div th:if="${roleName == 'super-role' || moment.owner.name == user.name}" class="post_control">
<a class="post_control_btn"><i class="ri-menu-3-line"></i></a>
<div class="post_control_box">
<div class="post_control_list round8 shadow uk-animation-slide-bottom-small uk-animation-fast"
th:pid="${moment.metadata.name}">
<a class="control_edit_post control_type" uk-toggle="target: #create_post_box">编辑瞬间</a>
<a class="control_delete_post control_type">删除瞬间</a>
</div>
</div>
</div>
<div class="list_user_meta">
<div class="avatar">
<img th:src="@{${moment.owner.avatar}}">
</div>
<div class="name">
[[${moment.owner.displayName}]]
<time itemprop="datePublished"
th:datetime="${#dates.format(moment.spec.releaseTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${moment.spec.releaseTime})}"></th:block>
</time>
</div>
</div>
<div class="blog_content">
<div class="entry-content" th:with="content=${moment.spec.content}">
<div class="p_title"></div>
<div class="t_content" th:utext="${content.html}">
<th:block th:utext="${content.html}"></th:block>
</div>
<th:block th:replace="~{'macro/tpl/moment-medium'}" />
</div>
<span class="ip_loca" th:if="${not #strings.isEmpty(moment.metadata.annotations.mylocal)}">
<i class="ri-map-pin-2-line"></i>
[[${moment.metadata.annotations.mylocal}]]
</span>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<a class="up_like " data-action="up" data-key="moment" th:data-id="${moment.metadata.name}">
<i class="ri-heart-2-line"></i>
<span th:text="${moment.stats.upvote}"></span>
</a>
<div class="pix_share_btn" th:with="_cover = ${not #strings.isEmpty(theme.config.moments.banner) ? theme.config.moments.banner : '/themes/theme-pix/assets/img/banner.jpg'}">
<a class="pix_icon share_btn_icon cr_poster"
th:poster-data="${moment.metadata.name}"
th:banner = "${_cover}"
th:uk-toggle="|target: #share_modal_${moment.metadata.name}|"
uk-tooltip="title: 瞬间分享; pos: top;" tabindex="0" title=""
aria-describedby="uk-tooltip-250" aria-expanded="false"><i
class="ri-share-forward-box-line"></i></a>
<div th:id="|share_modal_${moment.metadata.name}|" class="uk-flex-top poster_modal uk-modal"
uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside uk-icon uk-close"
type="button" uk-close></button>
<div class="poster_box_ap"></div>
<div class="post_share_box hide">
<a th:onclick="handleShare('wb','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: 微博分享; pos: top;" target="_blank">
<i class="ri-weibo-line"></i></a>
<a th:onclick="handleShare('qzone','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: QQ分享; pos: top;" target="_blank">
<i class="ri-chrome-line"></i>
</a>
<a th:onclick="handleShare('qq','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: QQ好友分享; pos: top;" target="_blank">
<i class="ri-qq-line"></i>
</a>
<a th:onclick="handleShare('copy','','','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: 复制链接; pos: top;">
<i class="ri-file-copy-line"></i>
</a>
<a class="poster_download" uk-tooltip="title: 下载海报; pos: top;">
<i class="ri-download-line"></i></a>
</div>
<img id="twoCode" style="display: none;" />
</div>
</div>
</div>
</div>
<div class="right" th:if="${(not theme.config.com.com_close) && haloCommentEnabled}">
<span class="comnum show_comment" th:pid="${moment.metadata.name}"><i
class="ri-message-3-line"></i>[[${moment.stats.totalComment}]]</span>
</div>
</div>
</div>
<div th:if="${(not theme.config.com.com_close) && haloCommentEnabled}" th:id="${'halo-comment-'+moment.metadata.name}" class="topic_comments_wrap" style="display: none">
<div class="topic_comments comments comments-area" data="moment">
<div class="toi_comments_main halo-comment">
<th:block th:replace="~{modules/widgets/halo-comment :: halo-comment(name=${moment.metadata.name},kind='Moment',group='moment.halo.run')}"></th:block>
</div>
</div>
</div>
</div>
</div>
</div>
<th:block th:fragment="content-moment(moments)">
<div th:each="moment,iStat : ${moments}" th:id="${'post-'+moment.metadata.name}"
class="loop_content p_item moment_item">
<div class="p_item_inner">
<!-- 帖子控制按钮(编辑/删除) -->
<div th:if="${roleName == 'super-role' || moment.owner.name == user.name}" class="post_control">
<a class="post_control_btn"><i class="ri-menu-3-line"></i></a>
<div class="post_control_box">
<div class="post_control_list round8 shadow uk-animation-slide-bottom-small uk-animation-fast"
th:pid="${moment.metadata.name}">
<a class="control_edit_post control_type" uk-toggle="target: #create_post_box">编辑瞬间</a>
<a class="control_delete_post control_type">删除瞬间</a>
</div>
</div>
</div>
<!-- 用户信息(头像/名称/时间) -->
<div class="list_user_meta">
<div class="avatar">
<img th:src="@{${moment.owner.avatar}}">
</div>
<div class="name">
[[${moment.owner.displayName}]]
<time itemprop="datePublished"
th:datetime="${#dates.format(moment.spec.releaseTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${moment.spec.releaseTime})}"></th:block>
</time>
</div>
</div>
<!-- 内容区域 -->
<div class="blog_content">
<div class="entry-content" th:with="content=${moment.spec.content}">
<div class="p_title"></div>
<!-- 内容容器(仅新增moment-collapse-container类) -->
<div class="t_content moment-collapse-container" th:utext="${content.html}">
<th:block th:utext="${content.html}"></th:block>
</div>
<th:block th:replace="~{'macro/tpl/moment-medium'}" />
</div>
<!-- IP地址显示 -->
<span class="ip_loca" th:if="${not #strings.isEmpty(moment.metadata.annotations.mylocal)}">
<i class="ri-map-pin-2-line"></i>
[[${moment.metadata.annotations.mylocal}]]
</span>
<!-- 底部操作栏 -->
<div class="entry-footer">
<div class="post_footer_meta">
<!-- 左侧(点赞/分享) -->
<div class="left">
<a class="up_like " data-action="up" data-key="moment" th:data-id="${moment.metadata.name}">
<i class="ri-heart-2-line"></i>
<span th:text="${moment.stats.upvote}"></span>
</a>
<div class="pix_share_btn"
th:with="_cover = ${not #strings.isEmpty(theme.config.moments.banner) ? theme.config.moments.banner : '/themes/theme-pix/assets/img/banner.jpg'}">
<a class="pix_icon share_btn_icon cr_poster" th:poster-data="${moment.metadata.name}"
th:banner="${_cover}" th:uk-toggle="|target: #share_modal_${moment.metadata.name}|"
uk-tooltip="title: 瞬间分享; pos: top;" tabindex="0" title=""
aria-describedby="uk-tooltip-250" aria-expanded="false"><i
class="ri-share-forward-box-line"></i></a>
<div th:id="|share_modal_${moment.metadata.name}|"
class="uk-flex-top poster_modal uk-modal" uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside uk-icon uk-close" type="button"
uk-close></button>
<div class="poster_box_ap"></div>
<div class="post_share_box hide">
<a th:onclick="handleShare('wb','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: 微博分享; pos: top;" target="_blank">
<i class="ri-weibo-line"></i></a>
<a th:onclick="handleShare('qzone','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: QQ分享; pos: top;" target="_blank">
<i class="ri-chrome-line"></i>
</a>
<a th:onclick="handleShare('qq','[(${_cover})]','[(${site.title+'-瞬间'})]','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: QQ好友分享; pos: top;" target="_blank">
<i class="ri-qq-line"></i>
</a>
<a th:onclick="handleShare('copy','','','[(${'/moments/'+moment.metadata.name})]')"
uk-tooltip="title: 复制链接; pos: top;">
<i class="ri-file-copy-line"></i>
</a>
<a class="poster_download" uk-tooltip="title: 下载海报; pos: top;">
<i class="ri-download-line"></i></a>
</div>
<img id="twoCode" style="display: none;" />
</div>
</div>
</div>
</div>
<!-- 右侧(评论数 + 新增标签显示) -->
<div class="right" th:if="${(not theme.config.com.com_close) && haloCommentEnabled}">
<!-- 新增:标签显示(样式与分类一致) -->
<th:block th:if="${not #lists.isEmpty(moment.spec.tags)}">
<div class="normal_cat"># [[${moment.spec.tags[0]}]]</div>
</th:block>
<span class="moment_tag_gap"></span>
<span class="comnum show_comment" th:pid="${moment.metadata.name}"><i
class="ri-message-3-line"></i>[[${moment.stats.totalComment}]]</span>
</div>
</div>
</div>
<!-- 评论区 -->
<div th:if="${(not theme.config.com.com_close) && haloCommentEnabled}"
th:id="${'halo-comment-'+moment.metadata.name}" class="topic_comments_wrap" style="display: none">
<div class="topic_comments comments comments-area" data="moment">
<div class="toi_comments_main halo-comment">
<th:block
th:replace="~{modules/widgets/halo-comment :: halo-comment(name=${moment.metadata.name},kind='Moment',group='moment.halo.run')}">
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
</th:block>
+4 -4
View File
@@ -1,5 +1,5 @@
<section class="no-results not-found">
<div class="page-content no_resault">
<img src="/themes/theme-pix/assets/img/nodata.png">
</div>
<section class="no-results not-found">
<div class="page-content no_resault">
<img src="/upload/nodata.png">
</div>
</section>
+51 -53
View File
@@ -1,54 +1,52 @@
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_content">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]
</span> - <time itemprop="datePublished" th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 'm')}"
th:src="@{/assets/img/lazyload.png}"
th:data-src="${_cover}" alt="">
</a>
</div>
</div><!-- .entry-content -->
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>
[[${post.stats.visit}]]
</span>
<span class="comnum"><i class="ri-chat-4-line"></i>
<small> [[${post.stats.comment}]] </small>
</span>
<a class="up_like " data-key="post" data-action="up" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div><!-- .entry-footer -->
</div>
</div>
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_card_content">
<div class="feature round12">
<a th:href="@{${post.status.permalink}}"
th:with="cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}">
<img class="round12 shadow lazy"
th:with="_cover = ${#strings.isEmpty(post.spec.cover) ? cover_img : thumbnail.gen(post.spec.cover, 's')}"
th:data-src="${_cover}" alt="">
</a>
</div>
<div class="card_right">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]</span> - <time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block></time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="comnum"><i class="ri-chat-4-line"></i><small>[[${post.stats.comment}]]</small></span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+42 -42
View File
@@ -1,43 +1,43 @@
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_card_content">
<div class="card_right">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]</span> - <time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block></time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p style="display: block" th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="comnum"><i class="ri-chat-4-line"></i><small>[[${post.stats.comment}]]</small></span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
<div th:id="${'post-'+post.metadata.name}"
class="loop_content p_item uk-animation-slide-bottom-small" th:classappend="${post.spec.pinned ? 'sticky' :''}">
<div class="normal_item_inner">
<div class="normal_card_content">
<div class="card_right">
<div class="entry-content">
<h2 class="entry-title"><a th:href="@{${post.status.permalink}}" rel="bookmark">[[${post.spec.title}]]</a></h2>
<div class="entry_meta">
<span class="nickname">@[[${post.owner.displayName}]]</span> - <time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block></time>
</div>
<th:block th:if="${not #strings.isEmpty(post.status.excerpt)}">
<p style="display: block" th:with="post_word_max = ${#conversions.convert(theme.config.post.post_word_max, 'java.lang.Integer') >= 0 ? theme.config.post.post_word_max : 100 },
excerpt = ${#strings.length(post.status.excerpt) > #conversions.convert(post_word_max, 'java.lang.Integer') ? post_word_max : #strings.length(post.status.excerpt)}">
[[${#strings.substring(post.status.excerpt,0,excerpt)+'...'}]]
</p>
</th:block>
</div>
<div class="entry-footer">
<div class="post_footer_meta">
<div class="left">
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="comnum"><i class="ri-chat-4-line"></i><small>[[${post.stats.comment}]]</small></span>
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
</div>
<div class="right">
<span th:if="${post.spec.pinned}" class="sticky_icon"><i class="ri-fire-line"></i> TOP</span>
<th:block th:if="${not #lists.isEmpty(post.categories)}">
<div class="normal_cat"># [[${post.categories[0].spec.displayName}]]</div>
</th:block>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+17 -23
View File
@@ -1,24 +1,18 @@
<article th:id="${'post-'+singlePage.metadata.name}" th:fragment="content-page">
<header class="entry-header">
<div class="left">
<i class="ri-focus-2-line"></i>
<h1 class="entry-title" th:text="${singlePage.spec.title}"></h1>
</div>
<div class="right">
<time itemprop="datePublished"
th:datetime="${#dates.format(singlePage.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
[[${#dates.format(singlePage.spec.publishTime, 'yyyy年MM月dd日')}]]
</time>
</div>
</header>
<div class="entry-content single-content">
<th:block th:utext="${singlePage.content.content}"></th:block>
</div>
<div id="comments" th:if="${(not theme.config.com.com_close) && haloCommentEnabled}" class="comments comments-area" data="normal">
<div class="halo-comment" >
<th:block th:replace="~{modules/widgets/halo-comment :: halo-comment(name=${singlePage.metadata.name},kind='SinglePage',group='content.halo.run')}"></th:block>
</div>
</div>
<article th:id="${'post-'+singlePage.metadata.name}" th:fragment="content-page">
<header class="entry-header">
<div class="left">
<i class="ri-focus-2-line"></i>
<h1 class="entry-title" th:text="${singlePage.spec.title}"></h1>
</div>
</header>
<div class="entry-content single-content">
<th:block th:utext="${singlePage.content.content}"></th:block>
</div>
<div id="comments" th:if="${(not theme.config.com.com_close) && haloCommentEnabled}" class="comments comments-area" data="normal">
<div class="halo-comment" >
<th:block th:replace="~{modules/widgets/halo-comment :: halo-comment(name=${singlePage.metadata.name},kind='SinglePage',group='content.halo.run')}"></th:block>
</div>
</div>
</article>
+146 -146
View File
@@ -1,147 +1,147 @@
<th:block th:fragment="content-single" th:with="mu_on = ${#annotations.get(post, 'mu_on')},plays_id = ${#annotations.get(post, 'plays_id')},
cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}
,_cover = ${not #strings.isEmpty(post.spec.cover) ? post.spec.cover : cover_img}">
<div class="blog_header">
<div th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="single_music_header">
<div class="mu_img"><img class="round12 shadow lazy" src="/themes/theme-pix/assets/img/lazyload.png" th:data-src="${_cover}" ></div>
<div class="right_info">
<h2 class="entry-title" th:text="${post.spec.title}"></h2>
<div class="header_meta">
<span class="single_time">
<i class="ri-time-line"></i>
<time itemprop="datePublished" th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</span>
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="edit_post" th:if="${roleName == 'super-role'}">
<a th:href="${'/console/posts/editor?name='+post.metadata.name+'&returnToView=true'}"
target="_self">
<i class="ri-edit-line"></i>编辑</a>
</span>
</div>
<div class="single-content_header">
<span class="single_cat">
<ul class="post-categories">
<li th:each="category : ${post.categories}">
<a th:href="@{${category.status.permalink}}" th:text="${category.spec.displayName}"
th:title="${category.spec.displayName}" rel="category tag"></a>
</li>
</ul>
</span>
</div>
<div class="mu_des"><th:block th:utext="${#annotations.get(post, 'mu_des')}"></th:block></div>
</div>
</div>
<div th:unless="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="post_header">
<h2 class="entry-title" th:text="${post.spec.title}"></h2>
<ul>
<div class="header_meta">
<span class="single_time">
<i class="ri-time-line"></i>
<time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</span>
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="edit_post" th:if="${roleName == 'super-role'}">
<a th:href="${'/console/posts/editor?name='+post.metadata.name+'&returnToView=true'}"
target="_self">
<i class="ri-edit-line"></i>编辑</a>
</span>
</div>
<div class="single-content_header">
<span class="single_cat">
<ul class="post-categories">
<li th:each="category : ${post.categories}">
<a th:href="@{${category.status.permalink}}" th:text="${category.spec.displayName}"
th:title="${category.spec.displayName}" rel="category tag"></a>
</li>
</ul>
</span>
</div>
</ul>
</div>
</div>
<div class="single-inner">
<th:block th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}">
<div th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="mu_l_title"><i class="ri-play-list-line"></i>歌曲列表</div>
<div class="posts_mu_list" th:pid="${post.metadata.name}" th:plays_id="${plays_id}"
th:mus_source="${#annotations.get(post, 'mus_source')}"
th:mus_type="${#annotations.getOrDefault(post, 'mus_type', 'playlist')}"
th:mu_on="${mu_on}"></div>
</th:block>
<div class="single-content" th:utext="${post.content.content}">
</div>
<div class="single-footer">
<div class="single_footer_box">
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
<div class="pix_share_btn">
<a class="pix_icon share_btn_icon cr_poster"
th:poster-data="${post.metadata.name}"
th:banner = "${_cover}"
th:uk-toggle="${'target: #share_modal_'+post.metadata.name}"
uk-tooltip="title: 文章分享; pos: top;">
<i class="ri-share-line"></i>
</a>
<div th:id="${'share_modal_'+post.metadata.name}" class="uk-flex-top poster_modal"
uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside" type="button" uk-close></button>
<div class="poster_box_ap"></div>
<div class="post_share_box hide">
<a
th:onclick="handleShare('wb','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: 微博分享; pos: top;" target="_blank"><i
class="ri-weibo-line"></i>
</a>
<a th:onclick="handleShare('qzone','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: QQ分享; pos: top;" target="_blank">
<i class="ri-chrome-line"></i>
</a>
<a
th:onclick="handleShare('qq','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: QQ好友分享; pos: top;" target="_blank">
<i class="ri-qq-line"></i>
</a>
<a th:onclick="handleShare('copy','','','[(${post.status.permalink})]')"
uk-tooltip="title: 复制链接; pos: top;">
<i class="ri-file-copy-line"></i>
</a>
<a class="poster_download" uk-tooltip="title: 下载海报; pos: top;">
<i class="ri-download-line"></i>
</a>
</div>
<img id="twoCode" style="display: none;" />
</div>
</div>
</div>
<div class="pix_donate_btn" th:if="${theme.config.post.donate_on}">
<a class="pix_icon donate_btn_icon" uk-toggle="target: #donate_modal" uk-tooltip="title: 打赏作者; pos: top;">
<i class="ri-gift-2-line"></i>
</a>
<div id="donate_modal" class="uk-flex-top donate_modal" uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside" type="button" uk-close></button>
<div class="donate_des" th:text="${theme.config.post.donate_des}"></div>
<div class="donate_pic"><img th:src="${theme.config.post.donate_pic}"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<th:block th:fragment="content-single" th:with="mu_on = ${#annotations.get(post, 'mu_on')},plays_id = ${#annotations.get(post, 'plays_id')},
cover_img=${#strings.contains(theme.config.post.post_banner,'http') ? ((#strings.contains(theme.config.post.post_banner,'?') ? theme.config.post.post_banner : theme.config.post.post_banner+'?')+','+post.spec.title): theme.config.post.post_banner}
,_cover = ${not #strings.isEmpty(post.spec.cover) ? post.spec.cover : cover_img}">
<div class="blog_header">
<div th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="single_music_header">
<div class="mu_img"><img class="round12 shadow lazy" src="/themes/theme-pix/assets/img/lazyload.png" th:data-src="${_cover}" ></div>
<div class="right_info">
<h2 class="entry-title" th:text="${post.spec.title}"></h2>
<div class="header_meta">
<span class="single_time">
<i class="ri-time-line"></i>
<time itemprop="datePublished" th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</span>
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="edit_post" th:if="${roleName == 'super-role'}">
<a th:href="${'/console/posts/editor?name='+post.metadata.name+'&returnToView=true'}"
target="_self">
<i class="ri-edit-line"></i>编辑</a>
</span>
</div>
<div class="single-content_header">
<span class="single_cat">
<ul class="post-categories">
<li th:each="category : ${post.categories}">
<a th:href="@{${category.status.permalink}}" th:text="${category.spec.displayName}"
th:title="${category.spec.displayName}" rel="category tag"></a>
</li>
</ul>
</span>
</div>
<div class="mu_des"><th:block th:utext="${#annotations.get(post, 'mu_des')}"></th:block></div>
</div>
</div>
<div th:unless="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="post_header">
<h2 class="entry-title" th:text="${post.spec.title}"></h2>
<ul>
<div class="header_meta">
<span class="single_time">
<i class="ri-time-line"></i>
<time itemprop="datePublished"
th:datetime="${#dates.format(post.spec.publishTime, 'yyyy-MM-dd HH:mm')}">
<th:block th:replace="~{modules/widgets/time :: time(${post.spec.publishTime})}"></th:block>
</time>
</span>
<span class="post_views"><i class="ri-eye-line"></i>[[${post.stats.visit}]]</span>
<span class="edit_post" th:if="${roleName == 'super-role'}">
<a th:href="${'/console/posts/editor?name='+post.metadata.name+'&returnToView=true'}"
target="_self">
<i class="ri-edit-line"></i>编辑</a>
</span>
</div>
<div class="single-content_header">
<span class="single_cat">
<ul class="post-categories">
<li th:each="category : ${post.categories}">
<a th:href="@{${category.status.permalink}}" th:text="${category.spec.displayName}"
th:title="${category.spec.displayName}" rel="category tag"></a>
</li>
</ul>
</span>
</div>
</ul>
</div>
</div>
<div class="single-inner">
<th:block th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}">
<div th:if="${mu_on == 'true' && not #strings.isEmpty(plays_id)}" class="mu_l_title"><i class="ri-play-list-line"></i>歌曲列表</div>
<div class="posts_mu_list" th:pid="${post.metadata.name}" th:plays_id="${plays_id}"
th:mus_source="${#annotations.get(post, 'mus_source')}"
th:mus_type="${#annotations.getOrDefault(post, 'mus_type', 'playlist')}"
th:mu_on="${mu_on}"></div>
</th:block>
<div class="single-content" th:utext="${post.content.content}">
</div>
<div class="single-footer">
<div class="single_footer_box">
<a class="up_like " data-action="up" data-key="post" th:data-id="${post.metadata.name}">
<i class="ri-heart-2-line"></i>
<span>[[${post.stats.upvote}]]</span>
</a>
<div class="pix_share_btn">
<a class="pix_icon share_btn_icon cr_poster"
th:poster-data="${post.metadata.name}"
th:banner = "${_cover}"
th:uk-toggle="${'target: #share_modal_'+post.metadata.name}"
uk-tooltip="title: 文章分享; pos: top;">
<i class="ri-share-line"></i>
</a>
<div th:id="${'share_modal_'+post.metadata.name}" class="uk-flex-top poster_modal"
uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside" type="button" uk-close></button>
<div class="poster_box_ap"></div>
<div class="post_share_box hide">
<a
th:onclick="handleShare('wb','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: 微博分享; pos: top;" target="_blank"><i
class="ri-weibo-line"></i>
</a>
<a th:onclick="handleShare('qzone','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: QQ分享; pos: top;" target="_blank">
<i class="ri-chrome-line"></i>
</a>
<a
th:onclick="handleShare('qq','[(${_cover})]','[(${post.spec.title})]','[(${post.status.permalink})]')"
uk-tooltip="title: QQ好友分享; pos: top;" target="_blank">
<i class="ri-qq-line"></i>
</a>
<a th:onclick="handleShare('copy','','','[(${post.status.permalink})]')"
uk-tooltip="title: 复制链接; pos: top;">
<i class="ri-file-copy-line"></i>
</a>
<a class="poster_download" uk-tooltip="title: 下载海报; pos: top;">
<i class="ri-download-line"></i>
</a>
</div>
<img id="twoCode" style="display: none;" />
</div>
</div>
</div>
<div class="pix_donate_btn" th:if="${theme.config.post.donate_on}">
<a class="pix_icon donate_btn_icon" uk-toggle="target: #donate_modal" uk-tooltip="title: 打赏作者; pos: top;">
<i class="ri-gift-2-line"></i>
</a>
<div id="donate_modal" class="uk-flex-top donate_modal" uk-modal>
<div class="uk-modal-dialog uk-modal-body uk-margin-auto-vertical">
<button class="uk-modal-close-outside" type="button" uk-close></button>
<div class="donate_des" th:text="${theme.config.post.donate_des}"></div>
<div class="donate_pic"><img th:src="${theme.config.post.donate_pic}"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</th:block>
+98 -88
View File
@@ -1,89 +1,99 @@
<th:block th:if="${not #lists.isEmpty(content.medium)}">
<div class="img_list" th:if="${#strings.contains(content.medium,'PHOTO')}">
<div class="list_inner" th:num="${content.medium.size}">
<span th:each="momentItem : ${content.medium}" th:if="${momentItem.type.name == 'PHOTO'}"
class="fancybox mo_img" th:href="${momentItem.url}"
th:data-fancybox="${'post-images-'+moment.metadata.name}">
<img class="lazy" th:src="@{/assets/img/lazyload.png}" th:data-src="${momentItem.url}">
</span>
</div>
</div>
<div class="video_list" th:if="${#strings.contains(content.medium,'VIDEO')}">
<div class="list_inner">
<th:block th:each="momentItem : ${content.medium}">
<div class="pix_local_player"
th:if="${momentItem.type.name == 'VIDEO' && momentItem.originType != 'video/bili'}">
<div class="video_play_btn">
<a><i class="ri-play-mini-line"></i></a>
</div>
<video th:src="${momentItem.url}" id="pix_video_player" objectfit="cover" x5-video-player-type="h5"
onplay="stopOtherMedia(this)"></video>
</div>
<div class="pix_bili_player"
th:if="${momentItem.type.name == 'VIDEO' && momentItem.originType == 'video/bili'}">
<iframe th:src="|//player.bilibili.com/player.html?bvid=${momentItem.url}&autoplay=0&page=1|"
scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
</div>
</th:block>
</div>
</div>
<div class="audio_list" th:if="${#strings.contains(content.medium,'AUDIO')}">
<div class="list_inner">
<th:block th:each="momentItem : ${content.medium}">
<div class="pix_player loacl_audio" th:if="${momentItem.type.name == 'AUDIO' &&
(momentItem.originType != 'audio/netease' && momentItem.originType != 'audio/tencent' &&
momentItem.originType != 'audio/kugou' && momentItem.originType != 'audio/kuwo')}">
<audio th:src="${momentItem.url}" controls></audio>
</div>
<div class="pix_player qt" th:if="${momentItem.type.name == 'AUDIO' &&
(momentItem.originType == 'audio/netease' || momentItem.originType == 'audio/tencent' ||
momentItem.originType == 'audio/kugou' || momentItem.originType == 'audio/kuwo')}"
th:id="${momentItem.url}"
th:type="${momentItem.originType}">
</div>
</th:block>
</div>
</div>
<div class="card_list" th:if="${#strings.contains(content.medium,'POST')}">
<div class="list_inner">
<th:block th:each="momentItem : ${content.medium}">
<th:block th:if="${momentItem.type.name == 'POST'}">
<div class="moment_card_item loop_card_item" th:pid="${momentItem.url}"
th:type="${momentItem.originType}">
<th:block th:if="${momentItem.originType == 'post'}">
<a th:with="post = ${postFinder.getByName(momentItem.url)}"
th:href="@{${post.status.permalink}}" target="_blank">
<div class="left"><img th:src="${post.spec.cover}"></div>
<div class="right">
<h4 th:text="${post.spec.title}"></h4>
<div class="content">
<th:block th:if="${!post.spec.excerpt.autoGenerate}"
th:text="${post.spec.excerpt.raw}" />
</div>
</div>
</a>
</th:block>
<th:block th:if="${momentItem.originType == 'page'}">
<a th:with="page = ${singlePageFinder.getByName(momentItem.url)}"
th:href="@{${page.status.permalink}}" target="_blank">
<div class="left"><img th:src="${page.spec.cover}"></div>
<div class="right">
<h4 th:text="${page.spec.title}"></h4>
<div class="content">
<th:block th:if="${!page.spec.excerpt.autoGenerate}"
th:text="${page.spec.excerpt.raw}" />
</div>
</div>
</a>
</th:block>
</div>
</th:block>
</th:block>
</div>
</div>
<th:block th:if="${not #lists.isEmpty(content.medium)}">
<div class="img_list">
<div class="list_inner" th:num="${content.medium.size}">
<th:block th:each="momentItem : ${content.medium}">
<th:block th:with="isStrictVideo=${momentItem.type.name == 'VIDEO'},
isVideoExt=${#strings.endsWith(#strings.toLowerCase(momentItem.url), '.mp4')
|| #strings.endsWith(#strings.toLowerCase(momentItem.url), '.webm')
|| #strings.endsWith(#strings.toLowerCase(momentItem.url), '.ogv')}">
<div class="pix_bili_player" th:if="${isStrictVideo && momentItem.originType == 'video/bili'}">
<iframe th:src="|//player.bilibili.com/player.html?bvid=${momentItem.url}&autoplay=0&page=1|"
scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
</div>
<!-- 非 Bilibili 视频:使用 Fancybox 灯箱 -->
<span th:if="${(isStrictVideo || isVideoExt) && momentItem.originType != 'video/bili'}"
class="fancybox mo_img" th:href="${momentItem.url}"
th:data-fancybox="${'post-images-' + moment.metadata.name}" th:data-type="video">
<video th:src="${momentItem.url}" class="pix_video"
style="width:100%; border-radius:8px;"></video>
<div
style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); pointer-events: none;">
<i class="ri-play-circle-line"
style="color: #41b87e; font-size: 40px; background-color: rgba(255, 255, 255, 0.8); border-radius: 50%;"></i>
</div>
</span>
<span th:if="${momentItem.type.name == 'PHOTO' && !isVideoExt}" class="fancybox mo_img"
th:href="${momentItem.url}" th:data-fancybox="${'post-images-' + moment.metadata.name}">
<img class="lazy" th:src="@{/assets/img/lazyload.png}" th:data-src="${momentItem.url}">
</span>
</th:block>
</th:block>
</div>
</div>
<div class="audio_list" th:if="${#strings.contains(content.medium,'AUDIO')}">
<div class="list_inner">
<th:block th:each="momentItem : ${content.medium}">
<div class="pix_player loacl_audio" th:if="${momentItem.type.name == 'AUDIO' &&
(momentItem.originType != 'audio/netease' && momentItem.originType != 'audio/tencent' &&
momentItem.originType != 'audio/kugou' && momentItem.originType != 'audio/kuwo')}">
<audio th:src="${momentItem.url}" controls></audio>
</div>
<div class="pix_player qt" th:if="${momentItem.type.name == 'AUDIO' &&
(momentItem.originType == 'audio/netease' || momentItem.originType == 'audio/tencent' ||
momentItem.originType == 'audio/kugou' || momentItem.originType == 'audio/kuwo')}"
th:id="${momentItem.url}" th:type="${momentItem.originType}">
</div>
</th:block>
</div>
</div>
<div class="card_list" th:if="${#strings.contains(content.medium,'POST')}">
<div class="list_inner">
<th:block th:each="momentItem : ${content.medium}">
<th:block th:if="${momentItem.type.name == 'POST'}">
<div class="moment_card_item loop_card_item" th:pid="${momentItem.url}"
th:type="${momentItem.originType}">
<th:block th:if="${momentItem.originType == 'post'}">
<a th:with="post = ${postFinder.getByName(momentItem.url)}"
th:href="@{${post.status.permalink}}">
<div class="left"><img th:src="${post.spec.cover}"></div>
<div class="right">
<h4 th:text="${post.spec.title}"></h4>
<div class="content">
<th:block th:if="${!post.spec.excerpt.autoGenerate}"
th:text="${post.spec.excerpt.raw}" />
</div>
</div>
</a>
</th:block>
<th:block th:if="${momentItem.originType == 'page'}">
<a th:with="page = ${singlePageFinder.getByName(momentItem.url)}"
th:href="@{${page.status.permalink}}" target="_blank">
<div class="left"><img th:src="${page.spec.cover}"></div>
<div class="right">
<h4 th:text="${page.spec.title}"></h4>
<div class="content">
<th:block th:if="${!page.spec.excerpt.autoGenerate}"
th:text="${page.spec.excerpt.raw}" />
</div>
</div>
</a>
</th:block>
</div>
</th:block>
</th:block>
</div>
</div>
</th:block>