Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
|
18bf403848 | |
|
b0b20298b5 | |
|
15b7523b18 | |
|
59f1d27e27 | |
|
b3c8ea001f | |
|
5c3fd36980 | |
|
c9be23aea0 | |
|
9c40556f6e | |
|
8c9dd30c52 | |
|
74b7bcecff | |
|
b4c55168b4 | |
|
0e343d704f | |
|
e8b1f941b4 | |
|
044fff9185 | |
|
c5c5b94f4f | |
|
5dd748cb53 | |
|
f205c3f37e | |
|
1c18ec0593 | |
|
52f8e45de0 | |
|
acb3f7e9e5 | |
|
92cf4296f2 | |
|
19a3934e6b | |
|
c7d947e313 | |
|
98defefd96 | |
|
53b3cf13a2 | |
|
6ee130ce3d | |
|
8c696e028c | |
|
641c487916 | |
|
2970fc745e | |
|
70979cdb94 |
55
README.md
|
@ -1,56 +1,21 @@
|
||||||
|
|
||||||
## 说明
|
## 说明
|
||||||
|
|
||||||
移植自 `bigfa `大大的 `hugo-theme-farallon` 原汁原味,可以直接使用 原主题的CSS
|
移植自 `bigfa `大大的 `hugo-theme-farallon`
|
||||||
精简部分 JS.
|
|
||||||
|
|
||||||
- 2024.7.4
|
## 更新日志 & 预览
|
||||||
把分类图片以`mid`.jpg 的形式在主题`/dist/img`目录下,自动匹配
|
|
||||||
|
|
||||||
- 2024.6.12
|
|
||||||
|
|
||||||
更新豆瓣API获取方式
|
|
||||||
[Docker 自动同步豆瓣书影音记录](https://fatesinger.com/103483)
|
|
||||||
主题设置处填入API
|
|
||||||
|
|
||||||
- 2024.6.7
|
|
||||||
|
|
||||||
用自带评论做的说说页面,来自
|
|
||||||
https://github.com/gogobody/typecho-whisper
|
|
||||||
删减部分内容只能发表文字
|
|
||||||
|
|
||||||
- 2024.6.5 v0.5.3
|
|
||||||
|
|
||||||
新增了好物的页面 还是通过memos来获取
|
|
||||||
|
|
||||||
- 2024.6.4 v0.5.1
|
|
||||||
|
|
||||||
更改了设置memos的方式
|
|
||||||
新增了Mastodon 的 说说 页面
|
|
||||||
|
|
||||||
- 2024.6.3 v0.5.0
|
|
||||||
|
|
||||||
还是抄了原版的豆瓣获取方式
|
|
||||||
|
|
||||||
- 2024.5.26 v0.4.1
|
|
||||||
|
|
||||||
抄了个网站统计页面
|
|
||||||
|
|
||||||
- 2024.5.24
|
|
||||||
|
|
||||||
新增了说说页面,基于memos 0.19 以下的版本
|
|
||||||
在后台设置memos的地址和memoID即可
|
|
||||||
默认获取最近20条公开的memo
|
|
||||||
|
|
||||||
|
|
||||||
## 原项目地址
|
|
||||||
https://github.com/bigfa/hugo-theme-farallon
|
|
||||||
|
|
||||||
|
https://www.imsun.org/archives/1640.html
|
||||||
|
|
||||||
## 功能
|
## 功能
|
||||||
|
|
||||||
### 豆瓣观影
|
### 豆瓣观影
|
||||||
|
|
||||||
更新 获取方式
|
更新豆瓣API获取方式
|
||||||
|
|
||||||
|
[Docker 自动同步豆瓣书影音记录](https://fatesinger.com/103483)
|
||||||
|
|
||||||
|
主题设置处填入API
|
||||||
|
|
||||||
### 友情链接
|
### 友情链接
|
||||||
|
|
||||||
|
@ -84,9 +49,7 @@ https://github.com/bigfa/hugo-theme-farallon
|
||||||
在自定义字段中填入`memos`值为memos地址
|
在自定义字段中填入`memos`值为memos地址
|
||||||
在自定义字段中填入`memosID`默认值为`1`,不为`1`时才需要设置
|
在自定义字段中填入`memosID`默认值为`1`,不为`1`时才需要设置
|
||||||
在自定义字段中填入`memostag`默认值为`好物`,不为`好物`时才需要设置
|
在自定义字段中填入`memostag`默认值为`好物`,不为`好物`时才需要设置
|
||||||
## 预览地址
|
|
||||||
|
|
||||||
https://www.imsun.org
|
|
||||||
|
|
||||||
## 感谢
|
## 感谢
|
||||||
|
|
||||||
|
|
61
archive.php
|
@ -46,20 +46,21 @@
|
||||||
</article>
|
</article>
|
||||||
<?php endwhile; ?>
|
<?php endwhile; ?>
|
||||||
</main>
|
</main>
|
||||||
<?php
|
<?php
|
||||||
$this->pagenav(
|
$this->pageNav(
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
1,
|
1,
|
||||||
'...',
|
'...',
|
||||||
array(
|
array(
|
||||||
'wrapTag' => 'div',
|
'wrapTag' => 'nav',
|
||||||
'wrapClass' => 'pagination_page',
|
'wrapClass' => 'nav-links nav-links__comment',
|
||||||
'itemTag' => '',
|
'itemTag' => '',
|
||||||
'textTag' => 'a',
|
'textTag' => 'span',
|
||||||
'currentClass' => 'active',
|
'itemClass' => 'page-numbers',
|
||||||
'prevClass' => 'prev',
|
'currentClass' => 'page-numbers current',
|
||||||
'nextClass' => 'next'
|
'prevClass' => 'hidden',
|
||||||
|
'nextClass' => 'hidden'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
?>
|
?>
|
||||||
|
@ -74,44 +75,4 @@
|
||||||
</header>
|
</header>
|
||||||
</main>
|
</main>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<style>
|
|
||||||
/* 分页 */
|
|
||||||
.pagination_page{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: var(--margin);
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a {
|
|
||||||
background: var(--theme);
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
.pagination_page a{
|
|
||||||
display: flex;
|
|
||||||
padding: 0.5rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
width: 1.75rem;
|
|
||||||
height: 1.75rem;
|
|
||||||
background: var(--background);
|
|
||||||
border-radius: 50%;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
transition: 0.2s;
|
|
||||||
-webkit-transition: 0.2s;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
letter-spacing: 0;
|
|
||||||
}
|
|
||||||
.pagination_page span.next{
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a:hover{
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
/* 分页 */
|
|
||||||
</style>
|
|
||||||
<?php $this->need('footer.php'); ?>
|
<?php $this->need('footer.php'); ?>
|
92
comments.php
|
@ -1,47 +1,7 @@
|
||||||
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
<style>
|
|
||||||
/* 分页 */
|
|
||||||
.pagination_page{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: var(--margin);
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a {
|
|
||||||
background: var(--theme);
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
.pagination_page a{
|
|
||||||
display: flex;
|
|
||||||
padding: 0.5rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
width: 1.75rem;
|
|
||||||
height: 1.75rem;
|
|
||||||
background: var(--background);
|
|
||||||
border-radius: 50%;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
transition: 0.2s;
|
|
||||||
-webkit-transition: 0.2s;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
letter-spacing: 0;
|
|
||||||
}
|
|
||||||
.pagination_page span.next{
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a:hover{
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
/* 分页 */
|
|
||||||
</style>
|
|
||||||
<div class="post--ingle__comments">
|
<div class="post--ingle__comments">
|
||||||
<?php $this->comments()->to($comments); ?>
|
<?php $this->comments()->to($comments); ?>
|
||||||
<?php if($this->allow('comment')): ?>
|
<?php if($this->allow('comment') && stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh') > -1): ?>
|
||||||
<?php if ($this->is('attachment')) : ?>
|
<?php if ($this->is('attachment')) : ?>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<h3 class="comments--title" id="comments">
|
<h3 class="comments--title" id="comments">
|
||||||
|
@ -88,25 +48,27 @@
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($comments->have()): ?>
|
<?php if ($comments->have()): ?>
|
||||||
<?php $comments->listComments(); ?>
|
<?php $comments->listComments(); ?>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
$comments->pageNav(
|
$comments->pageNav(
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
1,
|
1,
|
||||||
'...',
|
'...',
|
||||||
array(
|
array(
|
||||||
'wrapTag' => 'div',
|
'wrapTag' => 'nav',
|
||||||
'wrapClass' => 'pagination_page',
|
'wrapClass' => 'nav-links nav-links__comment',
|
||||||
'itemTag' => '',
|
'itemTag' => '',
|
||||||
'textTag' => 'a',
|
'textTag' => 'span',
|
||||||
'currentClass' => 'active',
|
'itemClass' => 'page-numbers',
|
||||||
'prevClass' => 'prev',
|
'currentClass' => 'page-numbers current',
|
||||||
'nextClass' => 'next'
|
'prevClass' => 'hidden',
|
||||||
|
'nextClass' => 'hidden'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
?>
|
?>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<center><h3><?php _e('暂无评论'); ?></h3></center>
|
<center><h3></h3></center>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php $this->options->twikoo(); ?>
|
<?php $this->options->twikoo(); ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -140,7 +102,12 @@ function threadedComments($comments, $options) {
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="comment--meta">
|
<div class="comment--meta">
|
||||||
<div class="comment--author"><?php echo $comments->author; ?><span class="dot"></span>
|
<div class="comment--author"><?php echo $comments->author; ?>
|
||||||
|
|
||||||
|
<?php if ($comments->authorId == $comments->ownerId): ?>
|
||||||
|
<span class="dot"></span> <span class="custom-span">作者</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
<span class="dot"></span>
|
||||||
<div class="comment--time"><?php $comments->date('Y-m-d H:i'); ?></div>
|
<div class="comment--time"><?php $comments->date('Y-m-d H:i'); ?></div>
|
||||||
<span class="comment-reply-link u-cursorPointer">
|
<span class="comment-reply-link u-cursorPointer">
|
||||||
<?php $comments->reply('<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true" class="" ><g><path d="M12 3.786c-4.556 0-8.25 3.694-8.25 8.25s3.694 8.25 8.25 8.25c1.595 0 3.081-.451 4.341-1.233l1.054 1.7c-1.568.972-3.418 1.534-5.395 1.534-5.661 0-10.25-4.589-10.25-10.25S6.339 1.786 12 1.786s10.25 4.589 10.25 10.25c0 .901-.21 1.77-.452 2.477-.592 1.731-2.343 2.477-3.917 2.334-1.242-.113-2.307-.74-3.013-1.647-.961 1.253-2.45 2.011-4.092 1.78-2.581-.363-4.127-2.971-3.76-5.578.366-2.606 2.571-4.688 5.152-4.325 1.019.143 1.877.637 2.519 1.342l1.803.258-.507 3.549c-.187 1.31.761 2.509 2.079 2.629.915.083 1.627-.356 1.843-.99.2-.585.345-1.224.345-1.83 0-4.556-3.694-8.25-8.25-8.25zm-.111 5.274c-1.247-.175-2.645.854-2.893 2.623-.249 1.769.811 3.143 2.058 3.319 1.247.175 2.645-.854 2.893-2.623.249-1.769-.811-3.144-2.058-3.319z"></path></g></svg>'); ?>
|
<?php $comments->reply('<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true" class="" ><g><path d="M12 3.786c-4.556 0-8.25 3.694-8.25 8.25s3.694 8.25 8.25 8.25c1.595 0 3.081-.451 4.341-1.233l1.054 1.7c-1.568.972-3.418 1.534-5.395 1.534-5.661 0-10.25-4.589-10.25-10.25S6.339 1.786 12 1.786s10.25 4.589 10.25 10.25c0 .901-.21 1.77-.452 2.477-.592 1.731-2.343 2.477-3.917 2.334-1.242-.113-2.307-.74-3.013-1.647-.961 1.253-2.45 2.011-4.092 1.78-2.581-.363-4.127-2.971-3.76-5.578.366-2.606 2.571-4.688 5.152-4.325 1.019.143 1.877.637 2.519 1.342l1.803.258-.507 3.549c-.187 1.31.761 2.509 2.079 2.629.915.083 1.627-.356 1.843-.99.2-.585.345-1.224.345-1.83 0-4.556-3.694-8.25-8.25-8.25zm-.111 5.274c-1.247-.175-2.645.854-2.893 2.623-.249 1.769.811 3.143 2.058 3.319 1.247.175 2.645-.854 2.893-2.623.249-1.769-.811-3.144-2.058-3.319z"></path></g></svg>'); ?>
|
||||||
|
@ -160,3 +127,26 @@ function threadedComments($comments, $options) {
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
<style>.custom-span {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 500; /* Equivalent to font-medium */
|
||||||
|
border-radius: 0.375rem; /* Equivalent to rounded-md */
|
||||||
|
font-size: 0.75rem; /* Equivalent to text-xs */
|
||||||
|
padding-left: 1.5px; /* Equivalent to px-1.5 */
|
||||||
|
padding-right: 1.5px; /* Equivalent to px-1.5 */
|
||||||
|
padding-top: 0.5px; /* Equivalent to py-0.5 */
|
||||||
|
padding-bottom: 0.5px; /* Equivalent to py-0.5 */
|
||||||
|
border: 1px solid var(--farallon-border-color); /* ring-1 and ring-inset with ring-gray-300 */
|
||||||
|
color: var(--farallon-text-gray); /* text-gray-700 */
|
||||||
|
background: var(--farallon-background-gray); /* bg-gray-50 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark mode styles */
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
.custom-span {
|
||||||
|
border-color: var(--farallon-hover-color); /* ring-gray-700 */
|
||||||
|
color: var(--farallon-hover-color); /* text-gray-200 */
|
||||||
|
background-color: var(--farallon-background-gray); /* bg-gray-800 */
|
||||||
|
}
|
||||||
|
}</style>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
$movie_id = $_GET['id'];
|
||||||
|
$api_url = "https://api.loliko.cn/movies/{$movie_id}";
|
||||||
|
|
||||||
|
$context = stream_context_create([
|
||||||
|
'http' => [
|
||||||
|
'ignore_errors' => true,
|
||||||
|
'timeout' => 10 // 设置10秒超时
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = file_get_contents($api_url, false, $context);
|
||||||
|
|
||||||
|
if ($response === FALSE) {
|
||||||
|
header("HTTP/1.1 500 Internal Server Error");
|
||||||
|
echo json_encode(['error' => 'Failed to fetch data from API']);
|
||||||
|
} else {
|
||||||
|
$responseData = json_decode($response, true);
|
||||||
|
if (json_last_error() === JSON_ERROR_NONE) {
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
echo $response;
|
||||||
|
} else {
|
||||||
|
header("HTTP/1.1 500 Internal Server Error");
|
||||||
|
echo json_encode(['error' => 'Invalid JSON response from API']);
|
||||||
|
}
|
||||||
|
}
|
|
@ -235,45 +235,6 @@
|
||||||
border-color: #3f3f46
|
border-color: #3f3f46
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: open sans;
|
|
||||||
src: url(../fonts/OpenSans-Regular.woff2)format("woff2"), url(../fonts/OpenSans-Regular.woff)format("woff");
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: open sans;
|
|
||||||
src: url(../fonts/OpenSans-Bold.woff2)format("woff2"), url(../fonts/OpenSans-Bold.woff)format("woff");
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: open sans;
|
|
||||||
src: url(../fonts/OpenSans-Light.woff2)format("woff2"), url(../fonts/OpenSans-Light.woff)format("woff");
|
|
||||||
font-weight: 200;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: open sans;
|
|
||||||
src: url(../fonts/OpenSans-Medium.woff2)format("woff2"), url(../fonts/OpenSans-Medium.woff)format("woff");
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: normal;
|
|
||||||
font-display: swap
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: mrs_saint_delafieldregular;
|
|
||||||
src: url(../fonts/mrssaintdelafield-regular-webfont.woff2)format("woff2"), url(../fonts/mrssaintdelafield-regular-webfont.woff)format("woff");
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/
|
/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/
|
||||||
html {
|
html {
|
||||||
line-height: 1.15;
|
line-height: 1.15;
|
||||||
|
@ -1097,6 +1058,11 @@ textarea {
|
||||||
position: relative
|
position: relative
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-links a {
|
||||||
|
padding: 20px;
|
||||||
|
position: relative
|
||||||
|
}
|
||||||
|
|
||||||
.nav-links .page-numbers:hover,
|
.nav-links .page-numbers:hover,
|
||||||
.nav-links .post-page-numbers:hover {
|
.nav-links .post-page-numbers:hover {
|
||||||
color: var(--farallon-hover-color)
|
color: var(--farallon-hover-color)
|
||||||
|
@ -1123,6 +1089,14 @@ textarea {
|
||||||
left: 0
|
left: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-links span {
|
||||||
|
color: var(--farallon-text-gray)
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
.nav-links .page-numbers.dots,
|
.nav-links .page-numbers.dots,
|
||||||
.nav-links .post-page-numbers.dots {
|
.nav-links .post-page-numbers.dots {
|
||||||
color: var(--farallon-text-gray)
|
color: var(--farallon-text-gray)
|
||||||
|
@ -3748,3 +3722,8 @@ textarea {
|
||||||
width: 80%
|
width: 80%
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* 留言url 强制换行 */
|
||||||
|
.comment-body a {
|
||||||
|
word-wrap: break-word;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
Before Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 244 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 206 KiB |
Before Width: | Height: | Size: 25 KiB |
|
@ -17,7 +17,7 @@
|
||||||
is_single = false;
|
is_single = false;
|
||||||
post_id = 0;
|
post_id = 0;
|
||||||
is_archive = false;
|
is_archive = false;
|
||||||
VERSION = "0.5.6";
|
VERSION = "0.6.1";
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.initCopyright();
|
this.initCopyright();
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initCopyright() {
|
initCopyright() {
|
||||||
const copyright = `<div class="site--footer__info">
|
const copyright = `<div class="site--footer__info">由<a href="https://www.typecho.org" target="_blank">Typecho</a> 驱动 <br>
|
||||||
Theme <a href="https://fatesinger.com/101971" target="_blank">farallon</a> by bigfa / version ${this.VERSION}
|
Theme <a href="https://fatesinger.com/101971" target="_blank">farallon</a> by bigfa <br>Made with<a href="https://www.imsun.org" target="_blank"> Sun</a> / version ${this.VERSION}
|
||||||
</div>`;
|
</div>`;
|
||||||
document.querySelector(".site--footer__content").insertAdjacentHTML("afterend", copyright);
|
document.querySelector(".site--footer__content").insertAdjacentHTML("afterend", copyright);
|
||||||
document.querySelector(".icon--copryrights").addEventListener("click", () => {
|
document.querySelector(".icon--copryrights").addEventListener("click", () => {
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
/**
|
||||||
|
* ViewImage.min.js 2.0.2
|
||||||
|
* MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* https://tokinx.github.io/ViewImage/
|
||||||
|
*/
|
||||||
|
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(b){return b.raw=b};$jscomp.createTemplateTagFirstArgWithRaw=function(b,a){b.raw=a;return b};$jscomp.arrayIteratorImpl=function(b){var a=0;return function(){return a<b.length?{done:!1,value:b[a++]}:{done:!0}}};$jscomp.arrayIterator=function(b){return{next:$jscomp.arrayIteratorImpl(b)}};$jscomp.makeIterator=function(b){var a="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];return a?a.call(b):$jscomp.arrayIterator(b)};
|
||||||
|
$jscomp.arrayFromIterator=function(b){for(var a,d=[];!(a=b.next()).done;)d.push(a.value);return d};$jscomp.arrayFromIterable=function(b){return b instanceof Array?b:$jscomp.arrayFromIterator($jscomp.makeIterator(b))};
|
||||||
|
(function(){window.ViewImage=new function(){var b=this;this.target="[view-image] img";this.listener=function(a){if(!(a.ctrlKey||a.metaKey||a.shiftKey||a.altKey)){var d=String(b.target.split(",").map(function(g){return g.trim()+":not([no-view])"})),c=a.target.closest(d);if(c){var e=c.closest("[view-image]")||document.body;d=[].concat($jscomp.arrayFromIterable(e.querySelectorAll(d))).map(function(g){return g.href||g.src});b.display(d,c.href||c.src);a.stopPropagation();a.preventDefault()}}};this.init=
|
||||||
|
function(a){a&&(b.target=a);["removeEventListener","addEventListener"].forEach(function(d){document[d]("click",b.listener,!1)})};this.display=function(a,d){var c=a.indexOf(d),e=(new DOMParser).parseFromString('\n <div class="view-image">\n <style>.view-image{position:fixed;inset:0;z-index:500;padding:1rem;display:flex;flex-direction:column;animation:view-image-in 300ms;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.view-image__out{animation:view-image-out 300ms}@keyframes view-image-in{0%{opacity:0}}@keyframes view-image-out{100%{opacity:0}}.view-image-btn{width:32px;height:32px;display:flex;justify-content:center;align-items:center;cursor:pointer;border-radius:3px;background-color:rgba(255,255,255,0.2)}.view-image-btn:hover{background-color:rgba(255,255,255,0.5)}.view-image-close__full{position:absolute;inset:0;background-color:rgba(48,55,66,0.3);z-index:unset;cursor:zoom-out;margin:0}.view-image-container{height:0;flex:1;display:flex;align-items:center;justify-content:center;}.view-image-lead{display:contents}.view-image-lead img{position:relative;z-index:1;max-width:100%;max-height:100%;object-fit:contain;border-radius:3px}.view-image-lead__in img{animation:view-image-lead-in 300ms}.view-image-lead__out img{animation:view-image-lead-out 300ms forwards}@keyframes view-image-lead-in{0%{opacity:0;transform:translateY(-20px)}}@keyframes view-image-lead-out{100%{opacity:0;transform:translateY(20px)}}[class*=__out] ~ .view-image-loading{display:block}.view-image-loading{position:absolute;inset:50%;width:8rem;height:2rem;color:#aab2bd;overflow:hidden;text-align:center;margin:-1rem -4rem;z-index:1;display:none}.view-image-loading::after{content:"";position:absolute;inset:50% 0;width:100%;height:3px;background:rgba(255,255,255,0.5);transform:translateX(-100%) translateY(-50%);animation:view-image-loading 800ms -100ms ease-in-out infinite}@keyframes view-image-loading{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}.view-image-tools{position:relative;display:flex;justify-content:space-between;align-content:center;color:#fff;max-width:600px;position: absolute; bottom: 5%; left: 1rem; right: 1rem; backdrop-filter: blur(10px);margin:0 auto;padding:10px;border-radius:5px;background:rgba(0,0,0,0.1);margin-bottom:constant(safe-area-inset-bottom);margin-bottom:env(safe-area-inset-bottom);z-index:1}.view-image-tools__count{width:60px;display:flex;align-items:center;justify-content:center}.view-image-tools__flip{display:flex;gap:10px}.view-image-tools [class*=-close]{margin:0 10px}</style>\n <div class="view-image-container">\n <div class="view-image-lead"></div>\n <div class="view-image-loading"></div>\n <div class="view-image-close view-image-close__full"></div>\n </div>\n <div class="view-image-tools">\n <div class="view-image-tools__count">\n <span><b class="view-image-index">'+
|
||||||
|
(c+1)+"</b>/"+a.length+'</span>\n </div>\n <div class="view-image-tools__flip">\n <div class="view-image-btn view-image-tools__flip-prev">\n <svg width="20" height="20" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="48" height="48" fill="white" fill-opacity="0.01"/><path d="M31 36L19 24L31 12" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>\n </div>\n <div class="view-image-btn view-image-tools__flip-next">\n <svg width="20" height="20" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="48" height="48" fill="white" fill-opacity="0.01"/><path d="M19 12L31 24L19 36" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>\n </div>\n </div>\n <div class="view-image-btn view-image-close">\n <svg width="16" height="16" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="48" height="48" fill="white" fill-opacity="0.01"/><path d="M8 8L40 40" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M8 40L40 8" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg>\n </div>\n </div>\n </div>\n ',
|
||||||
|
"text/html").body.firstChild,g=function(f){var h={Escape:"close",ArrowLeft:"tools__flip-prev",ArrowRight:"tools__flip-next"};h[f.key]&&e.querySelector(".view-image-"+h[f.key]).click()},l=function(f){var h=new Image,k=e.querySelector(".view-image-lead");k.className="view-image-lead view-image-lead__out";setTimeout(function(){k.innerHTML="";h.onload=function(){setTimeout(function(){k.innerHTML='<img src="'+h.src+'" alt="ViewImage" no-view/>';k.className="view-image-lead view-image-lead__in"},100)};
|
||||||
|
h.src=f},300)};document.body.appendChild(e);l(d);window.addEventListener("keydown",g);e.onclick=function(f){f.target.closest(".view-image-close")?(window.removeEventListener("keydown",g),e.onclick=null,e.classList.add("view-image__out"),setTimeout(function(){return e.remove()},290)):f.target.closest(".view-image-tools__flip")&&(c=f.target.closest(".view-image-tools__flip-prev")?0===c?a.length-1:c-1:c===a.length-1?0:c+1,l(a[c]),e.querySelector(".view-image-index").innerHTML=c+1)}}}})();
|
||||||
|
|
13
footer.php
|
@ -3,22 +3,18 @@
|
||||||
<div class="site--footer__content">
|
<div class="site--footer__content">
|
||||||
<div class=site--footer__sns>
|
<div class=site--footer__sns>
|
||||||
<?php $this->need('sns.php'); ?>
|
<?php $this->need('sns.php'); ?>
|
||||||
</div>
|
|
||||||
<?php //sitemap填入
|
<?php //sitemap填入
|
||||||
if($this->options->sitemapurl): ?>
|
if($this->options->sitemapurl): ?>
|
||||||
<a href="<?php $this->options->sitemapurl() ?>" target="_blank">💗</a>
|
<a href="<?php $this->options->sitemapurl() ?>" target="_blank">💗</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<a href="https://www.typecho.org" target="_blank">Typecho驱动</a>
|
</div>
|
||||||
<a href="https://www.imsun.org" target="_blank"> Made with Sun</a>
|
|
||||||
<?php //添加加载时间控制
|
<?php //添加加载时间控制
|
||||||
if ($this->options->showtime): ?>
|
if ($this->options->showtime): ?>
|
||||||
页面加载耗时<?php echo timer_stop();?>
|
页面加载耗时<?php echo timer_stop();?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<div class="copyright">
|
<?php $this->options->tongji(); ?>
|
||||||
<a href="<?php $this->options->siteUrl(); ?>">
|
<div class="copyright"> © <?php echo date('Y'); ?>
|
||||||
<?php $this->options->title(); ?>
|
<?php $this->options->title(); ?>
|
||||||
</a> ©
|
|
||||||
<?php $this->options->jzyear() ?>-<?php echo date('Y'); ?>
|
|
||||||
<svg class="icon icon--copryrights" viewBox="0 0 1040 1024" width="16" height="16">
|
<svg class="icon icon--copryrights" viewBox="0 0 1040 1024" width="16" height="16">
|
||||||
<path
|
<path
|
||||||
d="M717.056236 383.936299l-51.226708 0c-28.2893 0-51.226708 22.936385-51.226708 51.225685l0 128.062678c0 28.2893 22.937408 51.225685 51.226708 51.225685l51.226708 0c28.2893 0 51.225685-22.936385 51.225685-51.225685L768.281921 435.161984C768.281921 406.872684 745.345536 383.936299 717.056236 383.936299zM717.056236 537.611308c0 14.158465-11.480472 25.612331-25.613354 25.612331-14.132882 0-25.612331-11.453866-25.612331-25.612331l0-76.835969c0-14.158465 11.480472-25.613354 25.612331-25.613354 14.133905 0 25.613354 11.453866 25.613354 25.613354L717.056236 537.611308zM1013.977739 426.580538 859.776751 165.30079c-8.888438-15.063067-22.294772-25.975605-37.57171-32.080649-32.708959-34.856879-79.187527-56.638975-130.762159-56.638975L332.862064 76.581166c-51.575656 0-98.0532 21.782096-130.761136 56.639998-15.276938 6.105045-28.683273 17.017582-37.572734 32.079626L10.327206 426.580538c-21.26021 36.069497-8.655124 82.217537 28.239158 103.028515l115.00836 64.967664 0 199.163015c0 99.024318 80.264045 153.678078 179.287339 153.678078l358.580818 0c99.024318 0 179.290409-80.266092 179.290409-179.290409L870.733291 594.575694l115.00836-64.966641C1022.63184 508.798075 1035.238972 462.650035 1013.977739 426.580538zM153.574724 536.518417l-67.058278-37.875632c-24.589025-13.907755-33.019021-44.647873-18.809391-68.684312l85.86767-145.555074L153.574724 536.518417zM646.620024 127.807874c0 56.5786-60.205197 102.45137-134.467551 102.45137-74.261331 0-134.466528-45.873794-134.466528-102.45137L646.620024 127.807874zM819.507606 742.515071c0 84.893482-68.810179 153.677055-153.678078 153.677055L358.475418 896.192126c-84.8679 0-153.675008-68.783573-153.675008-153.677055l0-461.030142c0-76.150354 55.402821-139.361001 128.093377-151.545508 1.332345 83.883479 81.06734 151.545508 179.258687 151.545508 98.19237 0 177.926342-67.662029 179.25971-151.545508 72.690556 12.183484 128.096447 75.394131 128.096447 151.545508L819.508629 742.515071zM937.791569 498.642784l-67.058278 37.875632 0-252.111948 85.86767 145.552004C970.807521 453.995935 962.377524 484.736053 937.791569 498.642784z"
|
d="M717.056236 383.936299l-51.226708 0c-28.2893 0-51.226708 22.936385-51.226708 51.225685l0 128.062678c0 28.2893 22.937408 51.225685 51.226708 51.225685l51.226708 0c28.2893 0 51.225685-22.936385 51.225685-51.225685L768.281921 435.161984C768.281921 406.872684 745.345536 383.936299 717.056236 383.936299zM717.056236 537.611308c0 14.158465-11.480472 25.612331-25.613354 25.612331-14.132882 0-25.612331-11.453866-25.612331-25.612331l0-76.835969c0-14.158465 11.480472-25.613354 25.612331-25.613354 14.133905 0 25.613354 11.453866 25.613354 25.613354L717.056236 537.611308zM1013.977739 426.580538 859.776751 165.30079c-8.888438-15.063067-22.294772-25.975605-37.57171-32.080649-32.708959-34.856879-79.187527-56.638975-130.762159-56.638975L332.862064 76.581166c-51.575656 0-98.0532 21.782096-130.761136 56.639998-15.276938 6.105045-28.683273 17.017582-37.572734 32.079626L10.327206 426.580538c-21.26021 36.069497-8.655124 82.217537 28.239158 103.028515l115.00836 64.967664 0 199.163015c0 99.024318 80.264045 153.678078 179.287339 153.678078l358.580818 0c99.024318 0 179.290409-80.266092 179.290409-179.290409L870.733291 594.575694l115.00836-64.966641C1022.63184 508.798075 1035.238972 462.650035 1013.977739 426.580538zM153.574724 536.518417l-67.058278-37.875632c-24.589025-13.907755-33.019021-44.647873-18.809391-68.684312l85.86767-145.555074L153.574724 536.518417zM646.620024 127.807874c0 56.5786-60.205197 102.45137-134.467551 102.45137-74.261331 0-134.466528-45.873794-134.466528-102.45137L646.620024 127.807874zM819.507606 742.515071c0 84.893482-68.810179 153.677055-153.678078 153.677055L358.475418 896.192126c-84.8679 0-153.675008-68.783573-153.675008-153.677055l0-461.030142c0-76.150354 55.402821-139.361001 128.093377-151.545508 1.332345 83.883479 81.06734 151.545508 179.258687 151.545508 98.19237 0 177.926342-67.662029 179.25971-151.545508 72.690556 12.183484 128.096447 75.394131 128.096447 151.545508L819.508629 742.515071zM937.791569 498.642784l-67.058278 37.875632 0-252.111948 85.86767 145.552004C970.807521 453.995935 962.377524 484.736053 937.791569 498.642784z"
|
||||||
|
@ -26,7 +22,6 @@
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php $this->options->tongji(); ?>
|
|
||||||
</footer>
|
</footer>
|
||||||
<div class="backToTop">
|
<div class="backToTop">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="svgIcon" viewBox="0 0 14 14" fill="currentColor" aria-hidden="true">
|
<svg xmlns="http://www.w3.org/2000/svg" class="svgIcon" viewBox="0 0 14 14" fill="currentColor" aria-hidden="true">
|
||||||
|
|
143
functions.php
|
@ -7,29 +7,29 @@ function themeConfig($form) {
|
||||||
$form->addInput($icoUrl);
|
$form->addInput($icoUrl);
|
||||||
$sticky = new Typecho_Widget_Helper_Form_Element_Text('sticky', NULL, NULL, _t('置顶文章cid'), _t('多篇文章以`|`符号隔开'), _t('会在首页展示置顶文章。'));
|
$sticky = new Typecho_Widget_Helper_Form_Element_Text('sticky', NULL, NULL, _t('置顶文章cid'), _t('多篇文章以`|`符号隔开'), _t('会在首页展示置顶文章。'));
|
||||||
$form->addInput($sticky);
|
$form->addInput($sticky);
|
||||||
$jzyear = new Typecho_Widget_Helper_Form_Element_Text('jzyear', NULL, NULL, _t('建站年份'), _t('eg. 2006'), _t('会在页脚显示。'));
|
|
||||||
$form->addInput($jzyear);
|
|
||||||
$showProfile = new Typecho_Widget_Helper_Form_Element_Radio('showProfile',
|
$showProfile = new Typecho_Widget_Helper_Form_Element_Radio('showProfile',
|
||||||
array('0'=> _t('否'), '1'=> _t('是')),
|
array('0'=> _t('否'), '1'=> _t('是')),
|
||||||
'0', _t('是否在文章页面显示显示作者信息'), _t('选择“是”将在文章页面包含显示作者信息。'));
|
'0', _t('是否在文章页面显示作者信息'), _t('选择“是”将在文章页面包含显示作者信息。'));
|
||||||
$form->addInput($showProfile);
|
$form->addInput($showProfile);
|
||||||
$instagramurl = new Typecho_Widget_Helper_Form_Element_Text('instagramurl', NULL, NULL, _t('Instagram'), _t('会在个人信息显示'));
|
$instagramurl = new Typecho_Widget_Helper_Form_Element_Text('instagramurl', NULL, 'https://Instagram.com/', _t('Instagram'), _t('会在个人信息显示'));
|
||||||
$form->addInput($instagramurl);
|
$form->addInput($instagramurl);
|
||||||
$telegramurl = new Typecho_Widget_Helper_Form_Element_Text('telegramurl', NULL, NULL, _t('电报'), _t('会在个人信息显示'));
|
$telegramurl = new Typecho_Widget_Helper_Form_Element_Text('telegramurl', NULL, 'https://t.me/', _t('电报'), _t('会在个人信息显示'));
|
||||||
$form->addInput($telegramurl);
|
$form->addInput($telegramurl);
|
||||||
$githuburl = new Typecho_Widget_Helper_Form_Element_Text('githuburl', NULL, NULL, _t('github'), _t('会在个人信息显示'));
|
$githuburl = new Typecho_Widget_Helper_Form_Element_Text('githuburl', NULL, 'https://github.com/', _t('github'), _t('会在个人信息显示'));
|
||||||
$form->addInput($githuburl);
|
$form->addInput($githuburl);
|
||||||
$twitterurl = new Typecho_Widget_Helper_Form_Element_Text('twitterurl', NULL, NULL, _t('twitter'), _t('会在个人信息显示'));
|
$twitterurl = new Typecho_Widget_Helper_Form_Element_Text('twitterurl', NULL, 'https://x.com/', _t('twitter'), _t('会在个人信息显示'));
|
||||||
$form->addInput($twitterurl);
|
$form->addInput($twitterurl);
|
||||||
$mastodonurl = new Typecho_Widget_Helper_Form_Element_Text('mastodonurl', NULL, NULL, _t('mastodon'), _t('会在个人信息显示'));
|
$mastodonurl = new Typecho_Widget_Helper_Form_Element_Text('mastodonurl', NULL,'https://jiong.us/', _t('mastodon'), _t('会在个人信息显示'));
|
||||||
$form->addInput($mastodonurl);
|
$form->addInput($mastodonurl);
|
||||||
$sitemapurl = new Typecho_Widget_Helper_Form_Element_Text('sitemapurl', NULL, NULL, _t('sitemap'), _t('会在页脚显示'));
|
$sitemapurl = new Typecho_Widget_Helper_Form_Element_Text('sitemapurl', NULL, NULL, _t('sitemap'), _t('会在页脚显示'));
|
||||||
$form->addInput($sitemapurl);
|
$form->addInput($sitemapurl);
|
||||||
$cnavatar = new Typecho_Widget_Helper_Form_Element_Text('cnavatar', NULL, 'https://cravatar.cn/avatar/', _t('Gravatar镜像'), _t('默认https://cravatar.cn/avatar/,建议保持默认'));
|
$cnavatar = new Typecho_Widget_Helper_Form_Element_Text('cnavatar', NULL, 'https://cravatar.cn/avatar/', _t('Gravatar镜像'), _t('默认https://cravatar.cn/avatar/,建议保持默认'));
|
||||||
$form->addInput($cnavatar);
|
$form->addInput($cnavatar);
|
||||||
|
$midimg = new Typecho_Widget_Helper_Form_Element_Text('midimg', NULL, './img/', _t('填写分类图片路径,以"/"结尾'), _t('可以使用本地目录或者CDN地址,自动匹配路径下以mid.jpg格式的图片,使用分类页面时需要设置'));
|
||||||
|
$form->addInput($midimg);
|
||||||
$donate = new Typecho_Widget_Helper_Form_Element_Text('donate', NULL, 'https://blogcdn.loliko.cn/donate/wx.png', _t('赞赏二维码'), _t('不填写则不显示'));
|
$donate = new Typecho_Widget_Helper_Form_Element_Text('donate', NULL, 'https://blogcdn.loliko.cn/donate/wx.png', _t('赞赏二维码'), _t('不填写则不显示'));
|
||||||
$form->addInput($donate);
|
$form->addInput($donate);
|
||||||
$doubanID = new Typecho_Widget_Helper_Form_Element_Text('doubanID', NULL, 'https://db.imsun.org/', _t('豆瓣页面必需API,包含"/"'), _t(' '));
|
$doubanID = new Typecho_Widget_Helper_Form_Element_Text('doubanID', NULL, 'https://db.imsun.org/', _t('豆瓣页面必需API,包含"/"'), _t('使用豆瓣页面时需要设置'));
|
||||||
$form->addInput($doubanID);
|
$form->addInput($doubanID);
|
||||||
$twikoo = new Typecho_Widget_Helper_Form_Element_Textarea('twikoo', NULL, NULL, _t('引用第三方评论'), _t('不填写则不显示'));
|
$twikoo = new Typecho_Widget_Helper_Form_Element_Textarea('twikoo', NULL, NULL, _t('引用第三方评论'), _t('不填写则不显示'));
|
||||||
$form->addInput($twikoo);
|
$form->addInput($twikoo);
|
||||||
|
@ -37,6 +37,10 @@ function themeConfig($form) {
|
||||||
$form->addInput($addhead);
|
$form->addInput($addhead);
|
||||||
$tongji = new Typecho_Widget_Helper_Form_Element_Textarea('tongji', NULL, NULL, _t('统计代码'), _t('支持HTML'));
|
$tongji = new Typecho_Widget_Helper_Form_Element_Textarea('tongji', NULL, NULL, _t('统计代码'), _t('支持HTML'));
|
||||||
$form->addInput($tongji);
|
$form->addInput($tongji);
|
||||||
|
$showcate = new Typecho_Widget_Helper_Form_Element_Radio('showcate',
|
||||||
|
array('0'=> _t('否'), '1'=> _t('是')),
|
||||||
|
'0', _t('是否在文章页面显示文章分类'), _t('选择“是”将在文章页面显示文章的分类信息。'));
|
||||||
|
$form->addInput($showcate);
|
||||||
$showallwords = new Typecho_Widget_Helper_Form_Element_Radio('showallwords',
|
$showallwords = new Typecho_Widget_Helper_Form_Element_Radio('showallwords',
|
||||||
array('0'=> _t('否'), '1'=> _t('是')),
|
array('0'=> _t('否'), '1'=> _t('是')),
|
||||||
'0', _t('是否显示归档字数统计'), _t('选择“是”将在归档页面显示全站总字数。'));
|
'0', _t('是否显示归档字数统计'), _t('选择“是”将在归档页面显示全站总字数。'));
|
||||||
|
@ -523,3 +527,124 @@ function getParentCategory($categoryId) {
|
||||||
function getDays($time1, $time2) {
|
function getDays($time1, $time2) {
|
||||||
return floor(($time2 - $time1) / 86400);
|
return floor(($time2 - $time1) / 86400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取文章卡片
|
||||||
|
function get_article_info($atts) {
|
||||||
|
$default_atts = array(
|
||||||
|
'id' => '',
|
||||||
|
'url' => ''
|
||||||
|
);
|
||||||
|
$atts = array_merge($default_atts, $atts);
|
||||||
|
$db = Typecho_Db::get();
|
||||||
|
if (!empty($atts['id'])) {
|
||||||
|
$post = $db->fetchRow($db->select()->from('table.contents')
|
||||||
|
->where('cid = ?', $atts['id'])
|
||||||
|
->limit(1));
|
||||||
|
} elseif (!empty($atts['url'])) {
|
||||||
|
$post = $db->fetchRow($db->select()->from('table.contents')
|
||||||
|
->where('permalink = ?', $atts['url'])
|
||||||
|
->limit(1));
|
||||||
|
} else {
|
||||||
|
return '请提供文章ID或URL';
|
||||||
|
}
|
||||||
|
if (!$post) {
|
||||||
|
return '未找到文章';
|
||||||
|
}
|
||||||
|
$post = Typecho_Widget::widget('Widget_Abstract_Contents')->push($post);
|
||||||
|
|
||||||
|
// 获取缩略图
|
||||||
|
$imageToDisplay = img_postthumb($post['cid']);
|
||||||
|
if (empty($imageToDisplay)) {
|
||||||
|
$imageToDisplay = '//pic.0tz.top/api'; // 设置一个默认图片路径
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = '<div class="graph--mixtapeEmbed">';
|
||||||
|
$output .= '<a class="mixtapeContent" href="' . $post['permalink'] . '" target="_blank">';
|
||||||
|
$output .= '<span class="markup--strong markup--mixtapeEmbed-strong">' . $post['title'] . '</span>';
|
||||||
|
$output .= '<em class="markup--em markup--mixtapeEmbed-em">' . Typecho_Common::subStr(strip_tags($post['text']), 0, 100, '...') . '</em>';
|
||||||
|
$output .= '</a>';
|
||||||
|
$output .= '<a class="mixtapeImage" href="' . $post['permalink'] . '" target="_blank" style="background-image:url(' . $imageToDisplay . ')"></a>';
|
||||||
|
$output .= '</div>';
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个新的类来处理内容过滤
|
||||||
|
class ContentFilter
|
||||||
|
{
|
||||||
|
public static function filterContent($content, $widget, $lastResult)
|
||||||
|
{
|
||||||
|
// 首先运行之前的过滤器结果
|
||||||
|
$content = empty($lastResult) ? $content : $lastResult;
|
||||||
|
|
||||||
|
// 然后处理我们的文章短代码
|
||||||
|
$content = preg_replace_callback('/\[article\s+([^\]]+)\]/', function($matches) {
|
||||||
|
$atts = self::parse_atts($matches[1]);
|
||||||
|
return get_article_info($atts);
|
||||||
|
}, $content);
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析短代码属性
|
||||||
|
private static function parse_atts($text) {
|
||||||
|
$atts = array();
|
||||||
|
$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
|
||||||
|
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
|
||||||
|
if (preg_match_all($pattern, $text, $match, PREG_SET_ORDER)) {
|
||||||
|
foreach ($match as $m) {
|
||||||
|
if (!empty($m[1]))
|
||||||
|
$atts[strtolower($m[1])] = stripcslashes($m[2]);
|
||||||
|
elseif (!empty($m[3]))
|
||||||
|
$atts[strtolower($m[3])] = stripcslashes($m[4]);
|
||||||
|
elseif (!empty($m[5]))
|
||||||
|
$atts[strtolower($m[5])] = stripcslashes($m[6]);
|
||||||
|
elseif (isset($m[7]) && strlen($m[7]))
|
||||||
|
$atts[] = stripcslashes($m[7]);
|
||||||
|
elseif (isset($m[8]))
|
||||||
|
$atts[] = stripcslashes($m[8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $atts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 注册钩子
|
||||||
|
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('ContentFilter', 'filterContent');
|
||||||
|
|
||||||
|
// 编辑器按钮类
|
||||||
|
class EditorButton {
|
||||||
|
public static function render()
|
||||||
|
{
|
||||||
|
echo <<<EOF
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#wmd-button-row').append('<li class="wmd-button" id="wmd-article-button" title="插入文章引用"><span style="background: none;"><svg t="1687164718203" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4158" width="20" height="20"><path d="M810.666667 213.333333H213.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v426.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h597.333334c46.933333 0 85.333333-38.4 85.333333-85.333334V298.666667c0-46.933333-38.4-85.333333-85.333333-85.333334z m0 512H213.333333V298.666667h597.333334v426.666666z" p-id="4159"></path><path d="M298.666667 384h426.666666v85.333333H298.666667zM298.666667 554.666667h426.666666v85.333333H298.666667z" p-id="4160"></path></svg></span></li>');
|
||||||
|
|
||||||
|
$('#wmd-article-button').click(function() {
|
||||||
|
var articleId = prompt("请输入要引用的文章ID:");
|
||||||
|
if (articleId) {
|
||||||
|
var text = "[article id=\"" + articleId + "\"]";
|
||||||
|
var textarea = $('#text')[0];
|
||||||
|
var start = textarea.selectionStart;
|
||||||
|
var end = textarea.selectionEnd;
|
||||||
|
var value = textarea.value;
|
||||||
|
|
||||||
|
textarea.value = value.substring(0, start) + text + value.substring(end);
|
||||||
|
|
||||||
|
// 将光标移动到插入的文本之后
|
||||||
|
textarea.setSelectionRange(start + text.length, start + text.length);
|
||||||
|
textarea.focus();
|
||||||
|
|
||||||
|
// 触发change事件,确保编辑器更新
|
||||||
|
$('#text').trigger('change');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
EOF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 注册编辑器按钮钩子
|
||||||
|
Typecho_Plugin::factory('admin/write-post.php')->bottom = array('EditorButton', 'render');
|
||||||
|
Typecho_Plugin::factory('admin/write-page.php')->bottom = array('EditorButton', 'render');
|
||||||
|
|
|
@ -42,7 +42,10 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
<?php if ($this->options->logoUrl): ?>
|
<?php if ($this->options->logoUrl): ?>
|
||||||
<a href="<?php $this->options->siteUrl(); ?>" class="site--url">
|
<a href="<?php $this->options->siteUrl(); ?>" class="site--url">
|
||||||
<img src="<?php $this->options->logoUrl() ?>" class="avatar" alt="<?php $this->options->title() ?>" />
|
<img src="<?php $this->options->logoUrl() ?>" class="avatar" alt="<?php $this->options->title() ?>" />
|
||||||
</a>
|
</a>
|
||||||
|
<span class="u-xs-show">
|
||||||
|
<a href="<?php $this->options->siteUrl(); ?>"><?php $this->options->title() ?></a>
|
||||||
|
</span>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<span class="u-xs-show">
|
<span class="u-xs-show">
|
||||||
<a href="<?php $this->options->siteUrl(); ?>"><?php $this->options->title() ?></a>
|
<a href="<?php $this->options->siteUrl(); ?>"><?php $this->options->title() ?></a>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* 移植自HUGO主题 farallon 原作者 bigfa
|
* 一款单栏主题. 移植自HUGO主题 Farallon 原作者 bigfa
|
||||||
* @package Farallon
|
* @package Farallon
|
||||||
* @author 老孙
|
* @author 老孙
|
||||||
* @version 0.5.7
|
* @version 0.6.1
|
||||||
* @link https://www.imsun.org
|
* @link https://www.imsun.org
|
||||||
*/
|
*/
|
||||||
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
||||||
|
|
|
@ -17,10 +17,9 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
<?php
|
<?php
|
||||||
// 获取分类 ID
|
// 获取分类 ID
|
||||||
$categoryId = $categories->mid;
|
$categoryId = $categories->mid;
|
||||||
// 获取主题URL
|
$themeUrl = $this->options->midimg;
|
||||||
$themeUrl = $this->options->themeUrl;
|
|
||||||
// 为每个分类生成图片地址
|
// 为每个分类生成图片地址
|
||||||
$categoryImage = $themeUrl . '/dist/img/' . $categoryId . '.jpg';
|
$categoryImage = $themeUrl . $categoryId . '.jpg';
|
||||||
?>
|
?>
|
||||||
<div class="category--item">
|
<div class="category--item">
|
||||||
<img class="category--cover" src="<?php echo $categoryImage; ?>" loading="lazy" alt="<?php $categories->name(); ?>">
|
<img class="category--cover" src="<?php echo $categoryImage; ?>" loading="lazy" alt="<?php $categories->name(); ?>">
|
||||||
|
|
|
@ -79,8 +79,8 @@ $this->need('header.php');
|
||||||
category: <?php echo json_encode(categoryPostCount()); ?>
|
category: <?php echo json_encode(categoryPostCount()); ?>
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/jkjoy/typecho-theme-farallon@0.5.0/dist/js/chart.js"></script>
|
<script type="text/javascript" src="<?php $this->options->themeUrl('/dist/js/chart.js'); ?>"></script>
|
||||||
<script id="MathJax-script" async src="https://jsd.onmicrosoft.cn/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
<script id="MathJax-script" async src="<?php $this->options->themeUrl('/dist/js/tex-mml-chtml.js'); ?>"></script>
|
||||||
<script>
|
<script>
|
||||||
// 配置 MathJax
|
// 配置 MathJax
|
||||||
MathJax = {
|
MathJax = {
|
||||||
|
|
|
@ -11,9 +11,6 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
<h1 class="post--single__title"><?php $this->title() ?></h1>
|
<h1 class="post--single__title"><?php $this->title() ?></h1>
|
||||||
<h2 class="post--single__subtitle"><?php $this->content(); ?> </h2>
|
<h2 class="post--single__subtitle"><?php $this->content(); ?> </h2>
|
||||||
</header>
|
</header>
|
||||||
<div class="graph u-marginBottom30">
|
|
||||||
<?php $this->content(); ?>
|
|
||||||
</div>
|
|
||||||
<div class="template--linksWrap">
|
<div class="template--linksWrap">
|
||||||
<ul class="link-items">
|
<ul class="link-items">
|
||||||
<?php
|
<?php
|
||||||
|
|
|
@ -13,9 +13,8 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
</header>
|
</header>
|
||||||
<article class="post--single">
|
<article class="post--single">
|
||||||
<?php $tooot = $this->fields->tooot ? $this->fields->tooot : 'https://bbapi.ima.cm'; ?>
|
<?php $tooot = $this->fields->tooot ? $this->fields->tooot : 'https://bbapi.ima.cm'; ?>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
<script src="<?php $this->options->themeUrl('/dist/js/marked.min.js'); ?>"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
|
<script src="<?php $this->options->themeUrl('/dist/js/view-image.min.js'); ?>"></script>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css" />
|
|
||||||
<div id="tooot"></div>
|
<div id="tooot"></div>
|
||||||
<div class="nav-links" id="loadmore">
|
<div class="nav-links" id="loadmore">
|
||||||
<span class="loadmore">加载更多</span>
|
<span class="loadmore">加载更多</span>
|
||||||
|
@ -34,7 +33,7 @@ window.onload = function() {
|
||||||
if (media_attachments.length > 0) {
|
if (media_attachments.length > 0) {
|
||||||
media_attachments.forEach(attachment => {
|
media_attachments.forEach(attachment => {
|
||||||
if (attachment.type === 'image') {
|
if (attachment.type === 'image') {
|
||||||
mediaHTML += `<a href="${attachment.url}" target="_blank"><img src="${attachment.preview_url}" data-fancybox="img" class="thumbnail-image img"></a>`;
|
mediaHTML += `<a href="${attachment.url}" target="_blank"><img src="${attachment.preview_url}" class="thumbnail-image img" ></a>`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -45,7 +44,7 @@ window.onload = function() {
|
||||||
<article class='post--item post--item__status'>
|
<article class='post--item post--item__status'>
|
||||||
<div class='content'>
|
<div class='content'>
|
||||||
<header>
|
<header>
|
||||||
<img src="${account.avatar}" class="avatar" width="48" height="48" />
|
<img src="${account.avatar}" class="avatar" width="48" height="48" no-view />
|
||||||
<a class="humane--time" href="${url}" target="_blank">${new Date(created_at).toLocaleString()}</a>
|
<a class="humane--time" href="${url}" target="_blank">${new Date(created_at).toLocaleString()}</a>
|
||||||
</header>
|
</header>
|
||||||
<div class="description" itemprop="about">
|
<div class="description" itemprop="about">
|
||||||
|
@ -82,9 +81,7 @@ window.onload = function() {
|
||||||
// 绑定“加载更多”按钮的点击事件
|
// 绑定“加载更多”按钮的点击事件
|
||||||
document.getElementById('loadmore').addEventListener('click', fetchAndDisplayToots);
|
document.getElementById('loadmore').addEventListener('click', fetchAndDisplayToots);
|
||||||
};
|
};
|
||||||
Fancybox.bind("[data-fancybox]", {
|
window.ViewImage && ViewImage.init('.content img');
|
||||||
// Your custom options
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
div pre code {
|
div pre code {
|
||||||
|
@ -92,7 +89,6 @@ div pre code {
|
||||||
white-space: pre-wrap; /* CSS3 */
|
white-space: pre-wrap; /* CSS3 */
|
||||||
word-wrap: break-word; /* 老版本的浏览器 */
|
word-wrap: break-word; /* 老版本的浏览器 */
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
/* 指定如何断行 */
|
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|
138
page-memos.php
|
@ -18,15 +18,22 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
||||||
$memosnum = $this->fields->memosnum ? $this->fields->memosnum : '20';
|
$memosnum = $this->fields->memosnum ? $this->fields->memosnum : '20';
|
||||||
?>
|
?>
|
||||||
<article class="post--single">
|
<article class="post--single">
|
||||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
<script src="<?php $this->options->themeUrl('/dist/js/marked.min.js'); ?>"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
|
<script src="<?php $this->options->themeUrl('/dist/js/view-image.min.js'); ?>"></script>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css" />
|
|
||||||
<div id="talk"></div>
|
<div id="talk"></div>
|
||||||
|
<div class="nav-links" id="loadmore">
|
||||||
|
<span class="loadmore">加载更多</span>
|
||||||
|
</div>
|
||||||
</article>
|
</article>
|
||||||
<script>
|
<script>
|
||||||
if (99) {
|
let currentPage = 1; // 当前页码
|
||||||
let url = '<?php echo $memos; ?>';
|
const limit = 10; // 每页条数
|
||||||
fetch(url + '/api/v1/memo?creatorId=<?php echo $memosID; ?>&rowStatus=NORMAL&limit=<?php echo $memosnum; ?>')
|
let url = '<?php echo $memos; ?>';
|
||||||
|
let memosID = '<?php echo $memosID; ?>';
|
||||||
|
let memosnum = '<?php echo $memosnum; ?>';
|
||||||
|
|
||||||
|
function loadMemos(page) {
|
||||||
|
fetch(`${url}/api/v1/memo?creatorId=${memosID}&rowStatus=NORMAL&limit=${limit}&offset=${(page - 1) * limit}`)
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
let html = '';
|
let html = '';
|
||||||
|
@ -38,7 +45,7 @@ if (99) {
|
||||||
<article class='post--item post--item__status'>
|
<article class='post--item post--item__status'>
|
||||||
<div class='content'>
|
<div class='content'>
|
||||||
<header>
|
<header>
|
||||||
<img src="<?php $this->options->logoUrl() ?>" class="avatar" width="48" height="48" />
|
<img src="<?php $this->options->logoUrl() ?>" class="avatar" width="48" height="48" no-view />
|
||||||
<a class="humane--time" href="${memoURL}" target="_blank">${data.date}</a>
|
<a class="humane--time" href="${memoURL}" target="_blank">${data.date}</a>
|
||||||
</header>
|
</header>
|
||||||
<div class="description" itemprop="about">
|
<div class="description" itemprop="about">
|
||||||
|
@ -49,55 +56,65 @@ if (99) {
|
||||||
</article>
|
</article>
|
||||||
`;
|
`;
|
||||||
});
|
});
|
||||||
document.getElementById('talk').innerHTML = html;
|
document.getElementById('talk').innerHTML += html;
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('Error:', error);
|
console.error('Error:', error);
|
||||||
// 这里可以添加一些用户提示错误发生的 HTML 更新
|
// 这里可以添加一些用户提示错误发生的 HTML 更新
|
||||||
});
|
});
|
||||||
function Format(item) {
|
}
|
||||||
let date = getTime(new Date(item.createdTs * 1000).toString()),
|
|
||||||
content = item.content,
|
function Format(item) {
|
||||||
tag = item.content.match(/#([^\s#]+?) /g),
|
let date = getTime(new Date(item.createdTs * 1000).toString()),
|
||||||
imgs = content.match(/!\[.*\]\(.*?\)/g),
|
content = item.content,
|
||||||
text = ''
|
tag = item.content.match(/#([^\s#]+?) /g),
|
||||||
if (imgs) imgs = imgs.map(item => { return item.replace(/!\[.*\]\((.*?)\)/, '$1') })
|
imgs = content.match(/!\[.*\]\(.*?\)/g),
|
||||||
if (item.resourceList.length) {
|
text = ''
|
||||||
if (!imgs) imgs = []
|
if (imgs) imgs = imgs.map(item => { return item.replace(/!\[.*\]\((.*?)\)/, '$1') })
|
||||||
item.resourceList.forEach(t => {
|
if (item.resourceList.length) {
|
||||||
if (t.externalLink) imgs.push(t.externalLink)
|
if (!imgs) imgs = []
|
||||||
else imgs.push(`${url}/o/r/${t.id}/${t.publicId}/${t.filename}`)
|
item.resourceList.forEach(t => {
|
||||||
})
|
if (t.externalLink) imgs.push(t.externalLink)
|
||||||
}
|
else imgs.push(`${url}/o/r/${t.id}/${t.publicId}/${t.filename}`)
|
||||||
text = content.replace(/#(.*?)\s/g, '').replace(/\!?\[(.*?)\]\((.*?)\)/g, '').replace(/\{(.*?)\}/g, '')
|
})
|
||||||
content = text.replace(/\[(.*?)\]\((.*?)\)/g, `<a href="$2" target="_blank">$1</a>`);
|
|
||||||
if (imgs) {
|
|
||||||
content += `<div class="resimg">`
|
|
||||||
imgs.forEach(e => content += `<a href="${e}" data-fancybox="gallery" class="fancybox img" data-thumb="${e}"><img class="no-lazyload thumbnail-image" src="${e}"></a>`
|
|
||||||
)
|
|
||||||
content += '</div>'
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
content: content,
|
|
||||||
tag: tag ? tag[0].replace(/#([^\s#]+?) /,'$1') : '日常',
|
|
||||||
date: date,
|
|
||||||
text: text.replace(/\[(.*?)\]\((.*?)\)/g, '[链接]' + `${imgs?'[图片]':''}`)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 页面时间格式化
|
text = content.replace(/#(.*?)\s/g, '').replace(/\!?\[(.*?)\]\((.*?)\)/g, '').replace(/\{(.*?)\}/g, '')
|
||||||
function getTime(time) {
|
content = text.replace(/\[(.*?)\]\((.*?)\)/g, `<a href="$2" target="_blank">$1</a>`);
|
||||||
let d = new Date(time),
|
if (imgs) {
|
||||||
ls = [d.getFullYear(), d.getMonth() + 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()];
|
content += `<div class="resimg">`
|
||||||
for (let i = 0; i < ls.length; i++) {
|
imgs.forEach(e => content += `<a href="${e}" class="img" data-thumb="${e}"><img class="no-lazyload thumbnail-image" src="${e}"></a>`
|
||||||
ls[i] = ls[i] <= 9 ? '0' + ls[i] : ls[i] + ''
|
)
|
||||||
}
|
content += '</div>'
|
||||||
if (new Date().getFullYear() == ls[0]) return ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
}
|
||||||
else return ls[0] + '年' + ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
return {
|
||||||
|
content: content,
|
||||||
|
tag: tag ? tag[0].replace(/#([^\s#]+?) /,'$1') : '日常',
|
||||||
|
date: date,
|
||||||
|
text: text.replace(/\[(.*?)\]\((.*?)\)/g, '[链接]' + `${imgs?'[图片]':''}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Fancybox.bind("[data-fancybox]", {
|
|
||||||
// Your custom options
|
// 页面时间格式化
|
||||||
|
function getTime(time) {
|
||||||
|
let d = new Date(time),
|
||||||
|
ls = [d.getFullYear(), d.getMonth() + 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()];
|
||||||
|
for (let i = 0; i < ls.length; i++) {
|
||||||
|
ls[i] = ls[i] <= 9 ? '0' + ls[i] : ls[i] + ''
|
||||||
|
}
|
||||||
|
if (new Date().getFullYear() == ls[0]) return ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
||||||
|
else return ls[0] + '年' + ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始加载第一页
|
||||||
|
loadMemos(currentPage);
|
||||||
|
|
||||||
|
// 点击“加载更多”按钮时加载下一页
|
||||||
|
document.getElementById('loadmore').addEventListener('click', function() {
|
||||||
|
currentPage++;
|
||||||
|
loadMemos(currentPage);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
window.ViewImage && ViewImage.init('.content img');
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
div pre code {
|
div pre code {
|
||||||
|
@ -150,6 +167,33 @@ img {
|
||||||
grid-template-columns: 1fr; /* 修改为一列 */
|
grid-template-columns: 1fr; /* 修改为一列 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.load-more-btn {
|
||||||
|
display: block;
|
||||||
|
margin: 20px auto;
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #007bff;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.load-more-btn:hover {
|
||||||
|
background-color: #0056b3;
|
||||||
|
}
|
||||||
|
.nav-links .loadmore {
|
||||||
|
border: 1px solid var(--farallon-border-color);
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
padding: 5px 30px;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--farallon-text-gray)
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links .loadmore:hover {
|
||||||
|
border-color: var(--farallon-hover-color);
|
||||||
|
color: var(--farallon-hover-color)
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</div>
|
</div>
|
||||||
<?php $this->need('footer.php'); ?>
|
<?php $this->need('footer.php'); ?>
|
|
@ -1,18 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* 说说页面 - 时光机
|
|
||||||
*
|
|
||||||
* @package custom
|
|
||||||
*/
|
|
||||||
if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
|
|
||||||
<?php $this->need('header.php'); ?>
|
|
||||||
<section class="site--main">
|
|
||||||
<header class="archive--header">
|
|
||||||
<h1 class="post--single__title"><?php $this->title() ?></h1>
|
|
||||||
<h2 class="post--single__subtitle"><?php $this->content(); ?> </h2>
|
|
||||||
</header>
|
|
||||||
<article class="post--single">
|
|
||||||
<?php $this->need('times/dycomment.php'); ?>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
<?php $this->need('footer.php'); ?>
|
|
132
post.php
|
@ -36,10 +36,11 @@
|
||||||
</g>
|
</g>
|
||||||
</svg> <a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('0 ', '1 ', '%d '); ?></a>
|
</svg> <a href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('0 ', '1 ', '%d '); ?></a>
|
||||||
<?php if($this->user->hasLogin() && $this->user->pass('editor', true)): ?>
|
<?php if($this->user->hasLogin() && $this->user->pass('editor', true)): ?>
|
||||||
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
|
<svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" fill="currentColor">
|
||||||
<path
|
<path d="M16.7574 2.99677L14.7574 4.99677H5V18.9968H19V9.23941L21 7.23941V19.9968C21 20.5491 20.5523 20.9968 20 20.9968H4C3.44772 20.9968 3 20.5491 3 19.9968V3.99677C3 3.44448 3.44772 2.99677 4 2.99677H16.7574ZM20.4853 2.09727L21.8995 3.51149L12.7071 12.7039L11.2954 12.7063L11.2929 11.2897L20.4853 2.09727Z">
|
||||||
d="M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z"/>
|
</path>
|
||||||
</svg><a href="<?php $this->options->adminUrl('write-post.php?cid=' . $this->cid); ?>" target="_blank" title="编辑文章">Edit</a>
|
</svg>
|
||||||
|
<a href="<?php $this->options->adminUrl('write-post.php?cid=' . $this->cid); ?>" target="_blank" title="编辑文章">Edit</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="post--single__title"><?php $this->title() ?></h2>
|
<h2 class="post--single__title"><?php $this->title() ?></h2>
|
||||||
|
@ -135,6 +136,43 @@
|
||||||
<?php if ($this->options->showProfile): ?>
|
<?php if ($this->options->showProfile): ?>
|
||||||
<?php $this->need('profile.php'); ?>
|
<?php $this->need('profile.php'); ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
<!-- 分类-->
|
||||||
|
<?php if ($this->options->showcate): ?>
|
||||||
|
<?php
|
||||||
|
// 初始化分类图片地址为空
|
||||||
|
$categoryImage = '';
|
||||||
|
|
||||||
|
// 检查文章是否有分类
|
||||||
|
if ($this->categories) {
|
||||||
|
// 获取第一个分类的信息
|
||||||
|
$category = $this->categories[0];
|
||||||
|
$categoryId = $category['mid'];
|
||||||
|
$categoryName = $category['name'];
|
||||||
|
$categoryDescription = $category['description']; // 如果分类有说明(描述)
|
||||||
|
|
||||||
|
// 获取主题选项中的分类图片基本 URL
|
||||||
|
$themeUrl = $this->options->midimg;
|
||||||
|
|
||||||
|
// 生成分类图片地址
|
||||||
|
$categoryImage = $themeUrl . $categoryId . '.jpg';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- 显示分类信息 -->
|
||||||
|
<?php if ($category): ?>
|
||||||
|
<div class="category--card__list">
|
||||||
|
<a href="<?php echo $category['permalink']; ?>" class="category--card">
|
||||||
|
<div class="category--card__image">
|
||||||
|
<img src="<?php echo htmlspecialchars($categoryImage); ?>" alt="<?php echo htmlspecialchars($categoryName); ?>">
|
||||||
|
</div>
|
||||||
|
<div class="category--card__content">
|
||||||
|
<div class="category--card__title"><?php echo htmlspecialchars($categoryName); ?></div>
|
||||||
|
<div class="category--card__description"><?php echo htmlspecialchars($categoryDescription); ?></div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
<!-- 相关文章-->
|
<!-- 相关文章-->
|
||||||
<?php if ($this->options->showrelated): ?>
|
<?php if ($this->options->showrelated): ?>
|
||||||
<?php $this->need('related.php'); ?>
|
<?php $this->need('related.php'); ?>
|
||||||
|
@ -228,6 +266,92 @@ document.addEventListener('DOMContentLoaded', (event) => {
|
||||||
currentList.appendChild(item);
|
currentList.appendChild(item);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
function fetchWithRetry(url, retries = 3) {
|
||||||
|
return fetch(url)
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
|
}
|
||||||
|
return response.text(); // 首先获取文本响应
|
||||||
|
})
|
||||||
|
.then(text => {
|
||||||
|
try {
|
||||||
|
return JSON.parse(text); // 尝试解析 JSON
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Invalid JSON:', text);
|
||||||
|
throw new Error('Invalid JSON response');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
if (retries > 0) {
|
||||||
|
console.log(`Retrying... (${retries} attempts left)`);
|
||||||
|
return new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒
|
||||||
|
.then(() => fetchWithRetry(url, retries - 1));
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const doubanLinks = document.querySelectorAll('a[href^="https://movie.douban.com/subject/"]');
|
||||||
|
|
||||||
|
doubanLinks.forEach(link => {
|
||||||
|
const url = link.href;
|
||||||
|
const movieId = url.match(/subject\/(\d+)/)[1];
|
||||||
|
|
||||||
|
link.innerHTML += ' <span class="loading">(加载中...)</span>';
|
||||||
|
|
||||||
|
fetchWithRetry(`<?php $this->options->themeUrl('db.php'); ?>?id=${movieId}`)
|
||||||
|
.then(data => {
|
||||||
|
const movieInfo = createMovieInfoHTML(data, url);
|
||||||
|
const wrapper = document.createElement('div');
|
||||||
|
wrapper.innerHTML = movieInfo;
|
||||||
|
link.parentNode.replaceChild(wrapper, link);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error fetching movie data:', error);
|
||||||
|
// 显示错误消息给用户
|
||||||
|
link.innerHTML = `<span style="color: red;">加载失败</span> <a href="${url}" target="_blank">查看豆瓣电影详情</a>`;
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
const loadingSpan = link.querySelector('.loading');
|
||||||
|
if (loadingSpan) {
|
||||||
|
loadingSpan.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function createMovieInfoHTML(data, originalUrl) {
|
||||||
|
if (!data || data.error || Object.keys(data).length === 0) {
|
||||||
|
return `<a href="${originalUrl}" target="_blank">查看豆瓣电影详情</a>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `
|
||||||
|
<div class=doulist-item>
|
||||||
|
<div class=doulist-subject>
|
||||||
|
<div class=doulist-post>
|
||||||
|
<img decoding=async referrerpolicy=no-referrer src=${data.img}>
|
||||||
|
</div>
|
||||||
|
<div class=doulist-content>
|
||||||
|
<div class=doulist-title>
|
||||||
|
<a href="${originalUrl}" class=cute target="_blank" rel="external nofollow"> ${data.name} </a>
|
||||||
|
</div>
|
||||||
|
<div class=rating>
|
||||||
|
<span class=rating_nums>豆瓣评分 : ${data.rating}</span>
|
||||||
|
</div>
|
||||||
|
<div class=abstract>
|
||||||
|
${data.year}年 · ${data.country} · ${data.genre} · 导演: ${data.director} · 演员 : ${data.actor}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php $this->need('footer.php'); ?>
|
<?php $this->need('footer.php'); ?>
|
180
postlist.php
|
@ -1,68 +1,101 @@
|
||||||
<?php
|
<?php
|
||||||
//确保退出安全
|
// 确保退出安全
|
||||||
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
||||||
|
|
||||||
/** 文章置顶 */
|
/** 文章置顶 */
|
||||||
$sticky = $this->options->sticky ; //置顶的文章id,多个用|隔开
|
$sticky = $this->options->sticky; // 置顶的文章id,多个用|隔开
|
||||||
|
$db = Typecho_Db::get();
|
||||||
|
$pageSize = $this->options->pageSize;
|
||||||
|
|
||||||
if ($sticky) {
|
if ($sticky && !empty(trim($sticky))) {
|
||||||
$sticky_cids = array_filter(explode('|', $sticky)); //分割文本并过滤空值
|
$sticky_cids = array_filter(explode('|', $sticky)); // 分割文本并过滤空值
|
||||||
$sticky_html = " <span class=sticky--post> 置顶 </span> "; //置顶标题的 html
|
if (!empty($sticky_cids)) {
|
||||||
|
$sticky_html = " <span class='sticky--post'> 置顶 </span> "; // 置顶标题的 html
|
||||||
|
|
||||||
$db = Typecho_Db::get();
|
// 清空原有文章的队列
|
||||||
$pageSize = $this->options->pageSize;
|
$this->row = [];
|
||||||
|
$this->stack = [];
|
||||||
|
$this->length = 0;
|
||||||
|
|
||||||
// 构建置顶文章的查询
|
// 获取总数,并排除置顶文章数量
|
||||||
$selectSticky = $this->select()->where('type = ?', 'post');
|
if (isset($this->currentPage) && $this->currentPage == 1) {
|
||||||
foreach ($sticky_cids as $i => $cid) {
|
$totalOriginal = $this->getTotal();
|
||||||
if($i == 0)
|
$stickyCount = count($sticky_cids);
|
||||||
$selectSticky->where('cid = ?', $cid);
|
$this->setTotal(max($totalOriginal - $stickyCount, 0));
|
||||||
else
|
|
||||||
$selectSticky->orWhere('cid = ?', $cid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 清空原有文章的列队
|
// 构建置顶文章的查询
|
||||||
$this->row = [];
|
$selectSticky = $this->select()->where('type = ?', 'post');
|
||||||
$this->stack = [];
|
foreach ($sticky_cids as $i => $cid) {
|
||||||
$this->length = 0;
|
if ($i == 0)
|
||||||
|
$selectSticky->where('cid = ?', $cid);
|
||||||
|
else
|
||||||
|
$selectSticky->orWhere('cid = ?', $cid);
|
||||||
|
}
|
||||||
|
|
||||||
// 只在首页第一页展示置顶文章
|
// 获取置顶文章
|
||||||
if (($this->_currentPage || $this->currentPage) == 1) {
|
$stickyPosts = $db->fetchAll($selectSticky);
|
||||||
$stickyPosts = $db->fetchAll($selectSticky);
|
|
||||||
foreach ($stickyPosts as $stickyPost) {
|
// 压入置顶文章到文章队列
|
||||||
$stickyPost['title'] = $stickyPost['title'] . $sticky_html;
|
foreach ($stickyPosts as &$stickyPost) {
|
||||||
$this->push($stickyPost); //压入列队
|
$stickyPost['title'] .= $sticky_html;
|
||||||
|
$this->push($stickyPost);
|
||||||
|
}
|
||||||
|
|
||||||
|
$standardPageSize = $pageSize - count($stickyPosts);
|
||||||
|
} else {
|
||||||
|
$standardPageSize = $pageSize;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 构建普通文章的查询,排除置顶文章的 CID
|
// 构建正常文章查询,排除置顶文章
|
||||||
|
$selectNormal = $this->select()
|
||||||
|
->where('type = ?', 'post')
|
||||||
|
->where('status = ?', 'publish')
|
||||||
|
->where('created < ?', time())
|
||||||
|
->order('created', Typecho_Db::SORT_DESC)
|
||||||
|
->page(isset($this->currentPage) ? $this->currentPage : 1, $standardPageSize);
|
||||||
|
|
||||||
|
foreach ($sticky_cids as $cid) {
|
||||||
|
$selectNormal->where('table.contents.cid != ?', $cid);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果sticky_cids为空,使用默认查询
|
||||||
|
$selectNormal = $this->select()
|
||||||
|
->where('type = ?', 'post')
|
||||||
|
->where('status = ?', 'publish')
|
||||||
|
->where('created < ?', time())
|
||||||
|
->order('created', Typecho_Db::SORT_DESC)
|
||||||
|
->page(isset($this->currentPage) ? $this->currentPage : 1, $pageSize);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果没有置顶文章,使用默认查询
|
||||||
$selectNormal = $this->select()
|
$selectNormal = $this->select()
|
||||||
->where('type = ?', 'post')
|
->where('type = ?', 'post')
|
||||||
->where('status = ?', 'publish')
|
->where('status = ?', 'publish')
|
||||||
->where('created < ?', time())
|
->where('created < ?', time())
|
||||||
->order('created', Typecho_Db::SORT_DESC)
|
->order('created', Typecho_Db::SORT_DESC)
|
||||||
->page($this->_currentPage, $pageSize);
|
->page(isset($this->currentPage) ? $this->currentPage : 1, $pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($sticky_cids as $cid) {
|
// 登录用户显示私密文章
|
||||||
$selectNormal->where('table.contents.cid != ?', $cid);
|
if ($this->user->hasLogin()) {
|
||||||
|
$uid = $this->user->uid;
|
||||||
|
if ($uid) {
|
||||||
|
$selectNormal->orWhere('authorId = ? AND status = ?', $uid, 'private');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 登录用户显示私密文章
|
$normalPosts = $db->fetchAll($selectNormal);
|
||||||
if ($this->user->hasLogin()) {
|
|
||||||
$uid = $this->user->uid;
|
|
||||||
if ($uid) {
|
|
||||||
$selectNormal->orWhere('authorId = ? AND status = ?', $uid, 'private');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$normalPosts = $db->fetchAll($selectNormal);
|
// 如果之前没有清空队列(没有置顶文章的情况),现在清空
|
||||||
foreach ($normalPosts as $normalPost) {
|
if (empty($sticky) || empty(trim($sticky)) || empty($sticky_cids)) {
|
||||||
$this->push($normalPost); //压入列队
|
$this->row = [];
|
||||||
}
|
$this->stack = [];
|
||||||
|
$this->length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// 设置总数(减去置顶文章数量,以进行正确的分页)
|
// 压入正常文章到文章队列
|
||||||
$total = $this->getTotal() - count($sticky_cids);
|
foreach ($normalPosts as $normalPost) {
|
||||||
$this->setTotal(max($total, 0)); // 确保总数不为负数
|
$this->push($normalPost);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<?php while($this->next()): ?>
|
<?php while($this->next()): ?>
|
||||||
|
@ -131,59 +164,20 @@ if ($sticky) {
|
||||||
</article>
|
</article>
|
||||||
<?php endwhile; ?>
|
<?php endwhile; ?>
|
||||||
<?php
|
<?php
|
||||||
$this->pagenav(
|
$this->pageNav(
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="var(--main)"></path></svg>',
|
' ',
|
||||||
1,
|
1,
|
||||||
'...',
|
'...',
|
||||||
array(
|
array(
|
||||||
'wrapTag' => 'div',
|
'wrapTag' => 'nav',
|
||||||
'wrapClass' => 'pagination_page',
|
'wrapClass' => 'nav-links nav-links__comment',
|
||||||
'itemTag' => '',
|
'itemTag' => '',
|
||||||
'textTag' => 'a',
|
'textTag' => 'span',
|
||||||
'currentClass' => 'active',
|
'itemClass' => 'page-numbers',
|
||||||
'prevClass' => 'prev',
|
'currentClass' => 'page-numbers current',
|
||||||
'nextClass' => 'next'
|
'prevClass' => 'hidden',
|
||||||
|
'nextClass' => 'hidden'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
?>
|
?>
|
||||||
<style>
|
|
||||||
/* 分页 */
|
|
||||||
.pagination_page{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: var(--margin);
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a {
|
|
||||||
background: var(--theme);
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
.pagination_page a{
|
|
||||||
display: flex;
|
|
||||||
padding: 0.5rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
width: 1.75rem;
|
|
||||||
height: 1.75rem;
|
|
||||||
background: var(--background);
|
|
||||||
border-radius: 50%;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
transition: 0.2s;
|
|
||||||
-webkit-transition: 0.2s;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
letter-spacing: 0;
|
|
||||||
}
|
|
||||||
.pagination_page span.next{
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a:hover{
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
/* 分页 */
|
|
||||||
</style>
|
|
|
@ -1,54 +0,0 @@
|
||||||
<?php
|
|
||||||
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
|
||||||
class Content
|
|
||||||
{
|
|
||||||
public static function postCommentContent($content, $isLogin, $rememberEmail, $currentEmail, $parentEmail, $isTime = false)
|
|
||||||
{
|
|
||||||
//解析私密评论
|
|
||||||
$flag = true;
|
|
||||||
if (strpos($content, '[secret]') !== false) {//提高效率,避免每篇文章都要解析
|
|
||||||
$pattern = self::get_shortcode_regex(array('secret'));
|
|
||||||
$content = preg_replace_callback("/$pattern/", array('Content', 'secretContentParseCallback'), $content);
|
|
||||||
if ($isLogin || ($currentEmail == $rememberEmail && $currentEmail != "") || ($parentEmail == $rememberEmail && $rememberEmail != "")) {
|
|
||||||
$flag = true;
|
|
||||||
} else {
|
|
||||||
$flag = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($flag) {
|
|
||||||
$content = Content::parseContentPublic($content);
|
|
||||||
return $content;
|
|
||||||
} else {
|
|
||||||
if ($isTime) {
|
|
||||||
return '<div class="hideContent">此条为私密说说,仅发布者可见</div>';
|
|
||||||
} else {
|
|
||||||
return '<div class="hideContent">该评论仅登录用户及评论双方可见</div>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 解析时光机页面的评论内容
|
|
||||||
* @param $content
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function timeMachineCommentContent($content)
|
|
||||||
{
|
|
||||||
return Content::parseContentPublic($content);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 一些公用的解析,文章、评论、时光机公用的,与用户状态无关
|
|
||||||
* @param $content
|
|
||||||
* @return null|string|string[]
|
|
||||||
*/
|
|
||||||
public static function parseContentPublic($content)
|
|
||||||
{
|
|
||||||
$options = Helper::options();
|
|
||||||
//倒计时
|
|
||||||
if (strpos($content, '[countdown') !== false) {
|
|
||||||
$pattern = self::get_shortcode_regex(array('countdown'));
|
|
||||||
$content = preg_replace_callback("/$pattern/", array('Content', 'countdownParseCallback'),
|
|
||||||
$content);
|
|
||||||
}
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
}
|
|
256
times/UA.php
|
@ -1,256 +0,0 @@
|
||||||
<?php
|
|
||||||
class UA{
|
|
||||||
public $ua;
|
|
||||||
public function __construct($ua = '')
|
|
||||||
{
|
|
||||||
$this->ua = $ua;
|
|
||||||
}
|
|
||||||
public function returnBrowser(){
|
|
||||||
$ua = $this->ua;
|
|
||||||
if(preg_match('/rv:(11.0)/i', $ua, $matches)){
|
|
||||||
$title = 'Internet Explorer '. $matches[1];
|
|
||||||
$icon = 'fa fa-internet-explorer';//ie11
|
|
||||||
}elseif (preg_match('#MSIE ([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Internet Explorer '. $matches[1];
|
|
||||||
|
|
||||||
if ( strpos($matches[1], '7') !== false || strpos($matches[1], '8') !== false)
|
|
||||||
$icon = 'fa fa-internet-explorer';//ie8
|
|
||||||
elseif ( strpos($matches[1], '9') !== false)
|
|
||||||
$icon = 'fa fa-internet-explorer';//ie9
|
|
||||||
elseif ( strpos($matches[1], '10') !== false)
|
|
||||||
$icon = 'fa fa-internet-explorer';//ie10
|
|
||||||
}elseif (preg_match('#Edge/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Edge '. $matches[1];
|
|
||||||
$icon = 'fa fa-edge';
|
|
||||||
}elseif (preg_match('#TheWorld ([a-zA-Z0-9.]+)#i', $ua, $matches)){
|
|
||||||
$title = 'TheWorld(世界之窗) '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-theworld';
|
|
||||||
}elseif (preg_match('#JuziBrowser#i', $ua, $matches)){
|
|
||||||
$title = 'Juzi(桔子) '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#KBrowser#i', $ua, $matches)){
|
|
||||||
$title = 'KBrowser(超快) '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#MyIE#i', $ua, $matches)){
|
|
||||||
$title = 'MyIE(蚂蚁) '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#(Firefox|Phoenix|Firebird|BonEcho|GranParadiso|Minefield|Iceweasel)/([a-zA-Z0-9.]+)#i', $ua, $matches)){
|
|
||||||
$title = 'Firefox '. $matches[1];
|
|
||||||
$icon = 'fa fa-firefox';
|
|
||||||
}elseif (preg_match('#CriOS/([a-zA-Z0-9.]+)#i', $ua, $matches)){
|
|
||||||
$title = 'Chrome for iOS '. $matches[1];
|
|
||||||
$icon = 'fa fa-chrome';
|
|
||||||
} elseif (preg_match('#LBBROWSER#i', $ua, $matches)) {
|
|
||||||
$title = '猎豹';
|
|
||||||
$icon = 'iconfont icon-liebaoliulanqi';
|
|
||||||
}elseif (preg_match('#Opera.(.*)Version[ /]([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Opera '. $matches[2];
|
|
||||||
$icon = 'fa fa-opera';
|
|
||||||
if (preg_match('#opera mini#i', $ua))
|
|
||||||
$title = 'Opera Mini '. $matches[2];
|
|
||||||
}elseif (preg_match('#Maxthon( |\/)([a-zA-Z0-9.]+)#i', $ua,$matches)) {
|
|
||||||
$title = 'Maxthon(遨游) '. $matches[2];
|
|
||||||
$icon = 'iconfont icon-liulanqi-aoyou';
|
|
||||||
}elseif (preg_match('#360([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '360 Browser '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-liulanqi-jisu';
|
|
||||||
}elseif (preg_match('#SE 2([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'SouGou Browser 2 '.$matches[1];
|
|
||||||
$icon = 'iconfont icon-liulanqi-sougou';
|
|
||||||
}elseif (preg_match('#QQBrowser/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'QQBrowser '.$matches[1];
|
|
||||||
$icon = 'iconfont icon-QQliulanqi';
|
|
||||||
if (preg_match('#Mobile MQQBrowser/([a-zA-Z0-9.]+)#i', $ua,$matches)) {
|
|
||||||
$title = 'Mobile MQQBrowser '. $matches[1];
|
|
||||||
$icon = 'fa fa-qq';
|
|
||||||
}elseif (preg_match('#MicroMessenger/([a-zA-Z0-9.]+)#i', $ua,$matches)) {
|
|
||||||
$title = 'Wechat Browser '. $matches[1];
|
|
||||||
$icon = 'weixin';
|
|
||||||
}
|
|
||||||
}elseif (preg_match('#QQ/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'QQ '.$matches[1];
|
|
||||||
$icon = 'fa fa-qq';
|
|
||||||
}elseif (preg_match('#YYE/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'YYE '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#115Browser/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '115 '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#37abc/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '37abc '.$matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#TheWorld ([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '世界之窗 '.$matches[1];
|
|
||||||
$icon = 'iconfont icon-theworld';
|
|
||||||
}elseif (preg_match('#UCWEB([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'UCWEB '. $matches[1];
|
|
||||||
$icon = 'icon-win8 icon-ucliulanqi';
|
|
||||||
}elseif (preg_match('#UBrowser/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'UBrowser '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-ucliulanqi';
|
|
||||||
}elseif (preg_match('#Quark/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Quark '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-ucliulanqi'; //
|
|
||||||
}elseif (preg_match('#2345Explorer/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '2345Explorer '. $matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('#XiaoMi/MiuiBrowser/([0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = '小米 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-xiaomi';
|
|
||||||
}elseif (preg_match('/WeiBo/i', $ua, $matches)) {
|
|
||||||
$title = '微博 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-weibo';
|
|
||||||
}elseif (preg_match('/BIDU/i', $ua, $matches)) {
|
|
||||||
$title = '百度 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-setting';
|
|
||||||
}elseif (preg_match('/mailapp/i', $ua, $matches)) {
|
|
||||||
$title = 'EmailApp '. $matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('/Sleipnir/i', $ua, $matches)) {
|
|
||||||
$title = '神马 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-weibiaoti--';
|
|
||||||
}elseif (preg_match('/MZBrowser/i', $ua, $matches)) {
|
|
||||||
$title = '魅族 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-meizu';
|
|
||||||
}elseif (preg_match('/VivoBrowser/i', $ua, $matches)) {
|
|
||||||
$title = 'Vivo '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-VIVO';
|
|
||||||
}elseif (preg_match('/mixia/i', $ua, $matches)) {
|
|
||||||
$title = '米侠 '. $matches[1];
|
|
||||||
$icon = 'fa fa-globe';
|
|
||||||
}elseif (preg_match('/CoolMarket/i', $ua, $matches)) {
|
|
||||||
$title = '酷安 '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-coolapk';
|
|
||||||
}elseif (preg_match('/YaBrowser/i', $ua, $matches)) {
|
|
||||||
$title = 'Yandex '. $matches[1];
|
|
||||||
$icon = 'iconfont icon-yandex';
|
|
||||||
}elseif (preg_match('/Kraitnabo\/([^\s|;]+)/i', $ua, $matches)) {
|
|
||||||
$title = '南博 '. $matches[1];
|
|
||||||
$icon = 'anzhuo';
|
|
||||||
}elseif (preg_match('#Chrome/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Google Chrome '. $matches[1];
|
|
||||||
$icon = 'fa fa-chrome';
|
|
||||||
if (preg_match('#OPR/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Opera '. $matches[1];
|
|
||||||
$icon = 'fa fa-opera';
|
|
||||||
}
|
|
||||||
}elseif (preg_match('#Safari/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
|
|
||||||
$title = 'Safari '. $matches[1];
|
|
||||||
$icon = 'fa fa-safari';
|
|
||||||
}
|
|
||||||
return array("title"=>$title,
|
|
||||||
"icon"=>$icon);
|
|
||||||
}
|
|
||||||
public function returnOS(){
|
|
||||||
$ua = $this->ua;
|
|
||||||
$title = "未知浏览器";
|
|
||||||
$icon = "";
|
|
||||||
if (preg_match('/win/i', $ua)) {
|
|
||||||
if (preg_match('/Windows NT 6.1/i', $ua)) {
|
|
||||||
$title = "Windows 7";
|
|
||||||
$icon = "iconfont icon-win";
|
|
||||||
}elseif (preg_match('/Windows 98/i', $ua)) {
|
|
||||||
$title = "Windows 98";
|
|
||||||
$icon = "iconfont icon-win2";
|
|
||||||
}elseif (preg_match('/Windows NT 5.0/i', $ua)) {
|
|
||||||
$title = "Windows 2000";
|
|
||||||
$icon = "iconfont icon-win2";
|
|
||||||
}elseif (preg_match('/Windows NT 5.1/i', $ua)) {
|
|
||||||
$title = "Windows XP";
|
|
||||||
$icon = "iconfont icon-win";
|
|
||||||
}elseif (preg_match('/Windows NT 5.2/i', $ua)) {
|
|
||||||
if (preg_match('/Win64/i', $ua)) {
|
|
||||||
$title = "Windows XP 64 bit";
|
|
||||||
} else {
|
|
||||||
$title = "Windows Server 2003";
|
|
||||||
}
|
|
||||||
$icon = 'iconfont icon-win';
|
|
||||||
}elseif (preg_match('/Windows NT 6.0/i', $ua)) {
|
|
||||||
$title = "Windows Vista";
|
|
||||||
$icon = "fa fa-windows";
|
|
||||||
}elseif (preg_match('/Windows NT 6.2/i', $ua)) {
|
|
||||||
$title = "Windows 8";
|
|
||||||
$icon = "iconfont icon-win8";
|
|
||||||
}elseif (preg_match('/Windows NT 6.3/i', $ua)) {
|
|
||||||
$title = "Windows 8.1";
|
|
||||||
$icon = "iconfont icon-win8";
|
|
||||||
}elseif (preg_match('/Windows NT 10.0/i', $ua)) {
|
|
||||||
$title = "Windows 10";
|
|
||||||
$icon = "iconfont icon-win3";
|
|
||||||
}elseif (preg_match('/Windows Phone/i', $ua)) {
|
|
||||||
$matches = explode(';',$ua);
|
|
||||||
$title = $matches[2];
|
|
||||||
$icon = "iconfont icon-winphone";
|
|
||||||
}
|
|
||||||
} elseif (preg_match('#iPod.*.CPU.([a-zA-Z0-9.( _)]+)#i', $ua, $matches)) {
|
|
||||||
$title = "iPod ";//.$matches[1]
|
|
||||||
$icon = "iconfont icon-ipod";
|
|
||||||
} elseif (preg_match('/iPhone OS ([_0-9]+)/i', $ua, $matches)) {
|
|
||||||
$title = "Iphone ";//.$matches[1]
|
|
||||||
$icon = "iconfont icon-iphone";
|
|
||||||
} elseif (preg_match('/iPad; CPU OS ([_0-9]+)/i', $ua, $matches)) {
|
|
||||||
$title = "iPad ";//.$matches[1]
|
|
||||||
$icon = "iconfont icon-ipad";
|
|
||||||
} elseif (preg_match('/Mac OS X ([0-9_]+)/i', $ua, $matches)) {
|
|
||||||
if(count(explode(7,$matches[1]))>1) $matches[1] = 'Lion '.$matches[1];
|
|
||||||
elseif(count(explode(8,$matches[1]))>1) $matches[1] = 'Mountain Lion '.$matches[1];
|
|
||||||
$title = "Mac OSX";
|
|
||||||
$icon = "iconfont icon-macosdeicon";
|
|
||||||
} elseif (preg_match('/Macintosh/i', $ua)) {
|
|
||||||
$title = "Mac OS";
|
|
||||||
$icon = "iconfont icon-iconmacos";
|
|
||||||
} elseif (preg_match('/CrOS/i', $ua)){
|
|
||||||
$title = "Google Chrome OS";
|
|
||||||
$icon = "iconfont icon-iconchromeos";
|
|
||||||
} elseif (preg_match('/Linux/i', $ua)) {
|
|
||||||
$title = 'Linux';
|
|
||||||
$icon = 'fa fa-linux';
|
|
||||||
if (preg_match('/Ubuntu/i', $ua)) {
|
|
||||||
$title = "Ubuntu Linux";
|
|
||||||
$icon = "iconfont icon-ubuntu";
|
|
||||||
}elseif(preg_match('#Debian#i', $ua)) {
|
|
||||||
$title = "Debian GNU/Linux";
|
|
||||||
$icon = "iconfont icon-debian";
|
|
||||||
}elseif (preg_match('#Fedora#i', $ua)) {
|
|
||||||
$title = "Fedora Linux";
|
|
||||||
$icon = "iconfont icon-fedora";
|
|
||||||
}elseif (preg_match('/Kraitnabo\/([^\s|;]+)/i', $ua, $matches)) {
|
|
||||||
$title = '南博app '. $matches[1];
|
|
||||||
$icon = 'anzhuo';
|
|
||||||
}elseif (preg_match('/Android.([0-9. _]+)/i',$ua, $matches)) {
|
|
||||||
$title= "Android";
|
|
||||||
$icon = "iconfont icon-android";
|
|
||||||
}
|
|
||||||
} elseif (preg_match('/Android.([0-9. _]+)/i',$ua, $matches)) {
|
|
||||||
$title= "Android";
|
|
||||||
$icon = "iconfont icon-android";
|
|
||||||
}
|
|
||||||
return array("title"=>$title,
|
|
||||||
"icon"=>$icon);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 时光机页面ua,如果是手机设备,只显示设备类型,如果是电脑设备只显示电脑设备类型,如果是扩展发送,显示发送自「扩展」,如果是微信公众号,显示
|
|
||||||
*/
|
|
||||||
public function returnTimeUa(){
|
|
||||||
if ($this->ua == "weixin" || $this->ua == "weChat"){
|
|
||||||
return array("title"=>("微信公众号"),
|
|
||||||
"icon"=>"weixin");
|
|
||||||
}elseif ($this->ua == "crx"){
|
|
||||||
return array("title"=>("Chrome扩展"),
|
|
||||||
"icon"=>"liulanqi");
|
|
||||||
}elseif ($this->ua == "yearcross"){
|
|
||||||
return array("title"=>("YearCross"),
|
|
||||||
"icon"=>"QQ");
|
|
||||||
}elseif ($this->ua == "Kraitnabo"){
|
|
||||||
return array("title"=>("南博app"),
|
|
||||||
"icon"=>"anzhuo");
|
|
||||||
}elseif ($this->ua == "python"){
|
|
||||||
return array("title"=>("python脚本"),
|
|
||||||
"icon"=>"python");
|
|
||||||
}else{
|
|
||||||
$ua = $this->returnOS();
|
|
||||||
$ua["icon"] = "anzhuo";
|
|
||||||
return $ua;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,107 +0,0 @@
|
||||||
<?php
|
|
||||||
require_once 'UA.php';
|
|
||||||
require_once 'Content.php';
|
|
||||||
if ($this->user->hasLogin()){
|
|
||||||
$GLOBALS['isLogin'] = true;
|
|
||||||
}else{
|
|
||||||
$GLOBALS['isLogin'] = false;
|
|
||||||
}
|
|
||||||
function threadedComments($comments, $options)
|
|
||||||
{
|
|
||||||
$db = Typecho_Db::get();
|
|
||||||
?>
|
|
||||||
<article class='post--item post--item__status'>
|
|
||||||
<div class='content'>
|
|
||||||
<header>
|
|
||||||
<?php $ua = new UA($comments->agent); ?>
|
|
||||||
<div class="comment--avatar"><?php echo $comments->gravatar('48', ''); ?></div>
|
|
||||||
<?php $comments->author(); ?>
|
|
||||||
<span class="dot"></span>
|
|
||||||
<p class="humane--time"><?php $comments->date('Y年m月d日 H:i'); ?></p>
|
|
||||||
<span class="dot"></span>
|
|
||||||
<?php echo "发自" . $ua->returnTimeUa()['title'];?>
|
|
||||||
</header>
|
|
||||||
<div class="description" itemprop="about">
|
|
||||||
<?php echo Content::postCommentContent(Content::timeMachineCommentContent($comments->text),$GLOBALS['isLogin'] ,"","","",true); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<?php } ?>
|
|
||||||
<?php $this->comments()->to($comments); ?>
|
|
||||||
<input type="hidden" class="j-comment-url" value="<?php $this->commentUrl() ?>">
|
|
||||||
<?php if ($this->user->hasLogin()) : ?>
|
|
||||||
<div class="respond" id="comments">
|
|
||||||
<div class="comments--title">有什么新鲜事想告诉大家?</div>
|
|
||||||
<form method="post" id="textarea" class="comment-form" action="<?php $this->commentUrl() ?>">
|
|
||||||
<p class="comment-form-comment">
|
|
||||||
<textarea name="text" id="j-dynamic-form-text" class="textarea" autocomplete="off" rows="3" placeholder="发表您的新鲜事儿..."></textarea>
|
|
||||||
<input type="hidden" value="<?php $this->user->screenName(); ?>" name="author" />
|
|
||||||
<input type="hidden" value="<?php $this->user->mail(); ?>" name="mail" />
|
|
||||||
<input type="hidden" value="<?php $this->options->siteUrl(); ?>" name="url" />
|
|
||||||
<input type="hidden" name="_" value="<?php Typecho_Widget::widget('Widget_Security')->to($security);
|
|
||||||
echo $security->getToken($this->request->getRequestUrl()); ?>">
|
|
||||||
</p>
|
|
||||||
<p class="form-submit">
|
|
||||||
<button type="submit" class="submit"><?php _e('发表(Ctrl+Enter)'); ?></button>
|
|
||||||
</p>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php $comments->listComments(['commentUrl'=>$this->commentUrl,'class'=>$this]); ?>
|
|
||||||
<?php
|
|
||||||
$comments->pageNav(
|
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z" fill="var(--main)"></path></svg>',
|
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="var(--main)"></path></svg>',
|
|
||||||
1,
|
|
||||||
'...',
|
|
||||||
array(
|
|
||||||
'wrapTag' => 'div',
|
|
||||||
'wrapClass' => 'pagination_page',
|
|
||||||
'itemTag' => '',
|
|
||||||
'textTag' => 'a',
|
|
||||||
'currentClass' => 'active',
|
|
||||||
'prevClass' => 'prev',
|
|
||||||
'nextClass' => 'next'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
?>
|
|
||||||
<style>
|
|
||||||
/* 分页 */
|
|
||||||
.pagination_page{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: var(--margin);
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a {
|
|
||||||
background: var(--theme);
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
.pagination_page a{
|
|
||||||
display: flex;
|
|
||||||
padding: 0.5rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
width: 1.75rem;
|
|
||||||
height: 1.75rem;
|
|
||||||
background: var(--background);
|
|
||||||
border-radius: 50%;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
transition: 0.2s;
|
|
||||||
-webkit-transition: 0.2s;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
letter-spacing: 0;
|
|
||||||
}
|
|
||||||
.pagination_page span.next{
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.pagination_page li.active a:hover{
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
/* 分页 */
|
|
||||||
</style>
|
|