Merge pull request #216 from mashirozx/dev

update to v3.3.8
This commit is contained in:
Mashiro 2020-04-12 22:00:43 +08:00 committed by GitHub
commit 7a1ec65a9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 3084 additions and 741 deletions

File diff suppressed because one or more lines are too long

2
cdn/js/src/11.third-part-functions.js Normal file → Executable file
View File

@ -8,7 +8,7 @@ function get_gravatar(email, size) {
var size = size || 80;
return 'https://gravatar.2heng.xin/avatar/' + MD5(email) + '.jpg?s=' + size + '&d=mm';
return 'https://' + Poi.gravatar_url + '/' + MD5(email) + '.jpg?s=' + size + '&d=mm';
}
// sync css

View File

@ -150,6 +150,7 @@ h1.entry-title {
}
.entry-content tr:nth-child(even){background-color: #f2f2f2}
body.dark .entry-content tr:nth-child(even){background-color: unset}
.entry-content th {
color: white;

View File

@ -88,7 +88,7 @@
'comment_notes_after' => '',
'comment_notes_before' => '',
'fields' => apply_filters( 'comment_form_default_fields', array(
'avatar' => '<div class="cmt-info-container"><div class="comment-user-avatar"><img src="https://gravatar.2heng.xin/avatar/f11f237b3de93c93b24045e71f7f65c6?s=80&d=mm&r=g"><div class="socila-check qq-check"><i class="fa fa-qq" aria-hidden="true"></i></div><div class="socila-check gravatar-check"><i class="fa fa-google" aria-hidden="true"></i></div></div>',
'avatar' => '<div class="cmt-info-container"><div class="comment-user-avatar"><img src="' . get_template_directory_uri() . '/images/avatar.jpeg"><div class="socila-check qq-check"><i class="fa fa-qq" aria-hidden="true"></i></div><div class="socila-check gravatar-check"><i class="fa fa-google" aria-hidden="true"></i></div></div>',
'author' =>
'<div class="popup cmt-popup cmt-author" onclick="cmt_showPopup(this)"><span class="popuptext" id="thePopup" style="margin-left: -115px;width: 230px;">' . __("Auto pull nickname and avatar with a QQ num. entered", "sakura")/*输入QQ号将自动拉取昵称和头像*/ . '</span><input type="text" placeholder="' . __("Nickname or QQ number", "sakura") /*昵称或QQ号*/. ' ' . ( $req ? '(' . __("Name* ", "sakura") . ')' : '') . '" name="author" id="author" value="' . esc_attr($comment_author) . '" size="22" autocomplete="off" tabindex="1" ' . ($req ? "aria-required='true'" : '' ). ' /></div>',
'email' =>

View File

@ -65,7 +65,8 @@
<?php wp_nav_menu( array( 'depth' => 2, 'theme_location' => 'primary', 'container' => false ) ); ?>
</div><!-- m-nav-center end -->
<a class="cd-top faa-float animated "></a>
<button onclick="topFunction()" id="moblieGoTop" title="Go to top"><i class="fa fa-chevron-up" aria-hidden="true"></i></button>
<button id="moblieGoTop" title="Go to top"><i class="fa fa-chevron-up" aria-hidden="true"></i></button>
<button id="moblieDarkLight"><i class="fa fa-moon-o" aria-hidden="true"></i></button>
<!-- search start -->
<form class="js-search search-form search-form--modal" method="get" action="<?php echo home_url(); ?>" role="search">
<div class="search-form__inner">
@ -148,11 +149,11 @@
<div class="show-hide-wrap"><button class="show-hide"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 32"><path d="M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z"></path></svg></button></div>
</aside>
<?php endif; ?>
<?php if (akina_option('playlist_id', '')): ?>
<?php if (akina_option('aplayer_server') != 'off'): ?>
<div id="aplayer-float" style="z-index: 100;"
class="aplayer"
data-id="<?php echo akina_option('playlist_id', ''); ?>"
data-server="netease"
data-id="<?php echo akina_option('aplayer_playlistid', ''); ?>"
data-server="<?php echo akina_option('aplayer_server'); ?>"
data-type="playlist"
data-fixed="true"
data-theme="orange">

View File

@ -204,6 +204,7 @@ function sakura_scripts()
// }
//拦截移动端
version_compare($GLOBALS['wp_version'], '5.1', '>=') ? $reply_link_version = 'new' : $reply_link_version = 'old';
$gravatar_url = akina_option('gravatar_proxy') ?: 'secure.gravatar.com/avatar';
wp_localize_script('app', 'Poi', array(
'pjax' => akina_option('poi_pjax'),
'movies' => $movies,
@ -215,7 +216,8 @@ function sakura_scripts()
'reply_link_version' => $reply_link_version,
'api' => esc_url_raw(rest_url()),
'nonce' => wp_create_nonce('wp_rest'),
'google_analytics_id' => akina_option('google_analytics_id', '')
'google_analytics_id' => akina_option('google_analytics_id', ''),
'gravatar_url' => $gravatar_url
));
}
add_action('wp_enqueue_scripts', 'sakura_scripts');
@ -609,12 +611,14 @@ function get_link_items()
*/
function gravatar_cn($url)
{
$gravatar_url = array('0.gravatar.com', '1.gravatar.com', '2.gravatar.com', 'secure.gravatar.com');
$gravatar_url = array('0.gravatar.com/avatar','1.gravatar.com/avatar','2.gravatar.com/avatar','secure.gravatar.com/avatar');
//return str_replace($gravatar_url, 'cn.gravatar.com', $url);
//官方服务器近期大陆访问 429建议使用镜像
return str_replace( $gravatar_url, 'gravatar.2heng.xin', $url );
return str_replace( $gravatar_url, akina_option('gravatar_proxy'), $url );
}
if(akina_option('gravatar_proxy')){
add_filter('get_avatar_url', 'gravatar_cn', 4);
}
/*
* 自定义默认头像
@ -662,6 +666,7 @@ function akina_body_classes($classes)
/*if(!wp_is_mobile()) {
$classes[] = 'serif';
}*/
$classes[] = $_COOKIE['dark'.akina_option('cookie_version', '')] == '1' ? 'dark' : ' ';
return $classes;
}
add_filter('body_class', 'akina_body_classes');
@ -1759,7 +1764,9 @@ function DEFAULT_FEATURE_IMAGE()
//防止设置置顶文章造成的图片同侧bug
add_action( 'pre_get_posts', function( $q ){
if ($q->is_home() && $q->is_main_query() && $q->get('paged') > 1) {
if ( $q->is_home() && $q->is_main_query() ){
$q->set( 'posts_per_page', 10 - sizeof(get_option( 'sticky_posts' )) );
if ( $q->get( 'paged' ) > 1 )
$q->set( 'post__not_in', get_option( 'sticky_posts' ) );
}

View File

@ -62,6 +62,7 @@ if (akina_option('akina_meta') == true) {
<meta name="keywords" content="<?php echo $keywords; ?>" />
<?php } ?>
<link rel="shortcut icon" href="<?php echo akina_option('favicon_link', ''); ?>"/>
<meta name="theme-color" content="#31363b">
<meta http-equiv="x-dns-prefetch-control" content="on">
<?php wp_head(); ?>
<script type="text/javascript">

BIN
images/avatar.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

430
inc/api.php Normal file → Executable file
View File

@ -1,5 +1,18 @@
<?php
/**
* Classes
*/
include_once('classes/Aplayer.php');
include_once('classes/Bilibili.php');
include_once('classes/Cache.php');
include_once('classes/Images.php');
include_once('classes/QQ.php');
use Sakura\API\Images;
use Sakura\API\QQ;
use Sakura\API\Cache;
/**
* Router
*/
@ -32,63 +45,20 @@ add_action('rest_api_init', function () {
'methods' => 'GET',
'callback' => 'get_qq_avatar',
));
register_rest_route('sakura/v1', '/bangumi/bilibili', array(
'methods' => 'POST',
'callback' => 'bgm_bilibili',
));
register_rest_route('sakura/v1', '/meting/aplayer', array(
'methods' => 'GET',
'callback' => 'meting_aplayer',
));
});
/**
* QQ info
* https://sakura.2heng.xin/wp-json/sakura/v1/qqinfo/json
*/
function get_qq_info(WP_REST_Request $request)
{
if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
$output = array(
'status' => 403,
'success' => false,
'message' => 'Unauthorized client.'
);
} elseif ($_GET['qq']) {
$qq = $_GET['qq'];
/**
* TODO: 设置host国外服务器默认解析的不是国内IP可能无法获取数据
* 182.254.92.32 r.qzone.qq.com
* 参考https://www.php.net/manual/zh/function.file-get-contents.php#108309
*/
$get_info = file_get_contents('http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?get_nick=1&uins=' . $qq);
$get_info = mb_convert_encoding($get_info, "UTF-8", "GBK");
$name = json_decode(substr($get_info, 17, -1), true);
if ($name) {
$output = array(
'status' => 200,
'success' => true,
'message' => 'success',
'avatar' => 'https://q.qlogo.cn/headimg_dl?dst_uin=' . $qq . '&spec=100',
'name' => $name[$qq][6],
);
} else {
$output = array(
'status' => 404,
'success' => false,
'message' => 'QQ number not exist.'
);
}
} else {
$output = array(
'status' => 400,
'success' => false,
'message' => 'Bad Request'
);
}
$result = new WP_REST_Response($output, $output['status']);
$result->set_headers(array('Content-Type' => 'application/json'));
return $result;
}
/**
* Image uploader response
*/
function upload_image(WP_REST_Request $request)
{
function upload_image(WP_REST_Request $request) {
// see: https://developer.wordpress.org/rest-api/requests/
// handle file params $file === $_FILES
@ -110,19 +80,19 @@ function upload_image(WP_REST_Request $request)
$result->set_headers(array('Content-Type' => 'application/json'));
return $result;
}
$images = new \Sakura\API\Images();
switch (akina_option("img_upload_api")) {
case 'imgur':
$image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
$API_Request = Imgur_API($image);
$API_Request = $images->Imgur_API($image);
break;
case 'smms':
$image = $_FILES;
$API_Request = SMMS_API($image);
$API_Request = $images->SMMS_API($image);
break;
case 'chevereto':
$image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
$API_Request = Chevereto_API($image);
$API_Request = $images->Chevereto_API($image);
break;
}
@ -131,221 +101,13 @@ function upload_image(WP_REST_Request $request)
return $result;
}
/**
* Chevereto upload interface
*/
function Chevereto_API($image)
{
$upload_url = akina_option('cheverto_url') . '/api/1/upload';
$args = array(
'body' => array(
'source' => base64_encode($image),
'key' => akina_option('chevereto_api_key'),
),
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->status_txt == 'OK' && $reply->status_code == 200) {
$status = 200;
$success = true;
$message = "success";
$link = $reply->image->image->url;
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = $reply->status_code;
$success = false;
$message = $reply->error->message;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
/**
* Imgur upload interface
*/
function Imgur_API($image)
{
$client_id = akina_option('imgur_client_id');
$upload_url = akina_option('imgur_upload_image_proxy');
$args = array(
'headers' => array(
'Authorization' => 'Client-ID ' . $client_id,
),
'body' => array(
'image' => base64_encode($image),
),
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->success && $reply->status == 200) {
$status = 200;
$success = true;
$message = "success";
$link = $reply->data->link;
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = $reply->status;
$success = false;
$message = $reply->data->error;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
/**
* smms upload interface
*/
function SMMS_API($image)
{
$client_id = akina_option('smms_client_id');
$upload_url = "https://sm.ms/api/v2/upload";
$filename = $image['cmt_img_file']['name'];
$filedata = $image['cmt_img_file']['tmp_name'];
$Boundary = wp_generate_password();
$bits = file_get_contents($filedata);
$args = array(
"headers" => "Content-Type: multipart/form-data; boundary=$Boundary\r\n\r\nAuthorization: Basic $client_id\r\n\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97",
"body" => "--$Boundary\r\nContent-Disposition: form-data; name=\"smfile\"; filename=\"$filename\"\r\n\r\n$bits\r\n\r\n--$Boundary--"
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->success && $reply->code == 'success') {
$status = 200;
$success = true;
$message = $reply->message;
$link = $reply->data->url;
$proxy = akina_option('cmt_image_proxy') . $link;
} else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) {
$status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code并单独把 url 放进一个字段
$success = true;
$message = $reply->message;
$link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message);
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = 400;
$success = false;
$message = $reply->message;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
/*
* 定制实时搜索 rest api
* @rest api接口路径https://sakura.2heng.xin/wp-json/sakura/v1/cache_search/json
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间
*/
function cache_search_json()
{
global $more;
$vowels = array("[", "{", "]", "}", "<", ">", "\r\n", "\r", "\n", "-", "'", '"', '`', " ", ":", ";", '\\', " ", "toc");
$regex = <<<EOS
/<\/?[a-zA-Z]+("[^"]*"|'[^']*'|[^'">])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m
EOS;
$more = 1;
$posts = new WP_Query('posts_per_page=-1&post_status=publish&post_type=post');
while ($posts->have_posts()): $posts->the_post();
$output .= '{"type":"post","link":"' . get_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', apply_filters( 'the_content', get_the_content())))) . '},';
endwhile;
wp_reset_postdata();
$pages = new WP_Query('posts_per_page=-1&post_status=publish&post_type=page');
while ($pages->have_posts()): $pages->the_post();
$output .= '{"type":"page","link":"' . get_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', apply_filters( 'the_content', get_the_content())))) . '},';
endwhile;
wp_reset_postdata();
$tags = get_tags();
foreach ($tags as $tag) {
$output .= '{"type":"tag","link":"' . get_term_link($tag) . '","title":' . json_encode($tag->name) . ',"comments":"","text":""},';
}
$categories = get_categories();
foreach ($categories as $category) {
$output .= '{"type":"category","link":"' . get_term_link($category) . '","title":' . json_encode($category->name) . ',"comments":"","text":""},';
}
if (akina_option('live_search_comment')) {
$comments = get_comments();
foreach ($comments as $comment) {
$is_private = get_comment_meta($comment->comment_ID, '_private', true);
if ($is_private) {
$output .= '{"type":"comment","link":"' . get_comment_link($comment) . '","title":' . json_encode(get_the_title($comment->comment_post_ID)) . ',"comments":"","text":' . json_encode($comment->comment_author . "" . __("The comment is private", "sakura") /*该评论为私密评论*/) . '},';
continue;
} else {
$output .= '{"type":"comment","link":"' . get_comment_link($comment) . '","title":' . json_encode(get_the_title($comment->comment_post_ID)) . ',"comments":"","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, " ", $comment->comment_author . "" . $comment->comment_content))) . '},';
}
}
}
$output = substr($output, 0, strlen($output) - 1);
$data = '[' . $output . ']';
$result = new WP_REST_Response(json_decode($data), 200);
$result->set_headers(
array(
'Content-Type' => 'application/json',
'Cache-Control' => 'max-age=3600', // json 缓存控制
)
);
return $result;
}
/*
* 随机封面图 rest api
* @rest api接口路径https://sakura.2heng.xin/wp-json/sakura/v1/image/cover
*/
function cover_gallery() {
if(akina_option('cover_cdn_options')=="type_2"){
$img_array = glob(get_template_directory() . "/manifest/gallary/*.{gif,jpg,png}",GLOB_BRACE);
$img = array_rand($img_array);
$imgurl = trim($img_array[$img]);
$imgurl = str_replace(get_template_directory(), get_template_directory_uri(), $imgurl);
}elseif(akina_option('cover_cdn_options')=="type_3"){
$imgurl = akina_option('cover_cdn');
}else{
global $sakura_image_array;
$img_array = json_decode($sakura_image_array, true);
$img = array_rand($img_array);
$img_domain = akina_option('cover_cdn') ? akina_option('cover_cdn') : get_template_directory_uri();
if(strpos($_SERVER['HTTP_ACCEPT'], 'image/webp')) {
$imgurl = $img_domain . "/manifest/" . $img_array[$img]["webp"][0];
} else {
$imgurl = $img_domain . "/manifest/" . $img_array[$img]["jpeg"][0];
}
}
$imgurl = Images::cover_gallery();
$data = array('cover image');
$response = new WP_REST_Response($data);
$response->set_status(302);
@ -367,28 +129,7 @@ function feature_gallery() {
*/
function update_database() {
if (akina_option('cover_cdn_options') == "type_1") {
global $wpdb;
$sakura_table_name = $wpdb->base_prefix.'sakura';
$img_domain = akina_option('cover_cdn') ? akina_option('cover_cdn') : get_template_directory();
$manifest = file_get_contents($img_domain . "/manifest/manifest.json");
if($manifest) {
$manifest = array(
"mate_key" => "manifest_json",
"mate_value" => $manifest
);
$time = array(
"mate_key" => "json_time",
"mate_value" => date("Y-m-d H:i:s",time())
);
$wpdb->query("DELETE FROM $sakura_table_name WHERE `mate_key` ='manifest_json'");
$wpdb->query("DELETE FROM $sakura_table_name WHERE `mate_key` ='json_time'");
$wpdb->insert($sakura_table_name,$manifest);
$wpdb->insert($sakura_table_name,$time);
$output = "manifest.json has been stored into database.";
}else{
$output = "manifest.json not found, please ensure your url ($img_domain) is corrent.";
}
$output = Cache::update_database();
$result = new WP_REST_Response($output, 200);
return $result;
} else {
@ -396,29 +137,126 @@ function update_database() {
}
}
/*
* 定制实时搜索 rest api
* @rest api接口路径https://sakura.2heng.xin/wp-json/sakura/v1/cache_search/json
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间
*/
function cache_search_json() {
if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
$output = array(
'status' => 403,
'success' => false,
'message' => 'Unauthorized client.'
);
$result = new WP_REST_Response($output, 403);
} else {
$output = Cache::search_json();
$result = new WP_REST_Response($output, 200);
}
$result->set_headers(
array(
'Content-Type' => 'application/json',
'Cache-Control' => 'max-age=3600', // json 缓存控制
)
);
return $result;
}
/**
* QQ info
* https://sakura.2heng.xin/wp-json/sakura/v1/qqinfo/json
*/
function get_qq_info(WP_REST_Request $request) {
if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
$output = array(
'status' => 403,
'success' => false,
'message' => 'Unauthorized client.'
);
} elseif ($_GET['qq']) {
$qq = $_GET['qq'];
$output = QQ::get_qq_info($qq);
} else {
$output = array(
'status' => 400,
'success' => false,
'message' => 'Bad Request'
);
}
$result = new WP_REST_Response($output, $output['status']);
$result->set_headers(array('Content-Type' => 'application/json'));
return $result;
}
/**
* QQ头像链接解密
* https://sakura.2heng.xin/wp-json/sakura/v1/qqinfo/avatar
*/
function get_qq_avatar() {
global $sakura_privkey;
$encrypted = $_GET["qq"];
if(isset($encrypted)){
$iv = str_repeat($sakura_privkey, 2);
$encrypted = base64_decode(urldecode($encrypted));
$qq_number = openssl_decrypt($encrypted, 'aes-128-cbc', $sakura_privkey, 0, $iv);
preg_match('/^\d{3,}$/', $qq_number, $matches);
$imgurl='https://q2.qlogo.cn/headimg_dl?dst_uin='.$matches[0].'&spec=100';
$imgurl = QQ::get_qq_avatar($encrypted);
if (akina_option('qq_avatar_link') == 'type_2') {
$imgdata = file_get_contents($imgurl);
header("Content-type: image/jpeg");
header("Cache-Control: max-age=86400");
$response = new WP_REST_Response();
$response->set_headers(array(
'Content-Type' => 'image/jpeg',
'Cache-Control' => 'max-age=86400'
));
echo $imgdata;
} else {
$response = new WP_REST_Response();
$response->set_status(301);
$response->header('Location', $imgurl);
}
return $response;
}
function bgm_bilibili() {
if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
$output = array(
'status' => 403,
'success' => false,
'message' => 'Unauthorized client.'
);
$response = new WP_REST_Response($output, 403);
} else {
$page = $_GET["page"] ?: 2;
$bgm = new \Sakura\API\Bilibili();
$html = preg_replace("/\s+|\n+|\r/", ' ', $bgm->get_bgm_items($page));
$response = new WP_REST_Response($html, 200);
}
return $response;
}
function meting_aplayer() {
$type = $_GET['type'];
$id = $_GET['id'];
$wpnonce = $_GET['_wpnonce'];
$meting_pnonce = $_GET['meting_pnonce'];
if ((isset($wpnonce) && !check_ajax_referer('wp_rest', $wpnonce, false)) || (isset($nonce) && !wp_verify_nonce($nonce, $type . '#:' . $id))) {
$output = array(
'status' => 403,
'success' => false,
'message' => 'Unauthorized client.'
);
$response = new WP_REST_Response($output, 403);
} else {
$Meting_API = new \Sakura\API\Aplayer();
$data = $Meting_API->get_data($type, $id);
if ($type === 'playlist') {
$response = new WP_REST_Response($data, 200);
$response->set_headers(array('cache-control' => 'max-age=3600'));
} elseif ($type === 'lyric') {
$response = new WP_REST_Response();
$response->set_headers(array('cache-control' => 'max-age=3600'));
echo $data;
} else {
$response = new WP_REST_Response();
$response->set_status(301);
$response->header('Location', $data);
}
}
return $response;
}

156
inc/classes/Aplayer.php Normal file
View File

@ -0,0 +1,156 @@
<?php
namespace Sakura\API;
class Aplayer
{
public $server;
public $playlist_id;
private $cookies;
public $api_url;
public function __construct() {
$this->server = akina_option('aplayer_server');
$this->playlist_id = akina_option('aplayer_playlistid');
$this->cookies = akina_option('aplayer_cookie');
$this->api_url = rest_url('sakura/v1/meting/aplayer');
require('Meting.php');
}
public function get_data($type, $id) {
$server = $this->server;
$cookies = $this->cookies;
$playlist_id = $this->playlist_id;
$api = new \Sakura\API\Meting($server);
if (!empty($cookies) && $server === "netease") $api->cookie($cookies);
switch ($type) {
case 'song':
$data = $api->format(true)->song($id);
$data = json_decode($data, true)["url"];
$data = $this->song_url($data);
break;
// case 'album':
// $data = $api->format(true)->album($id);
// $data=json_decode($data, true)["url"];
// break;
case 'playlist':
$data = $api->format(true)->playlist($playlist_id);
$data = $this->format_playlist($data);
break;
case 'lyric':
$data = $api->format(true)->lyric($id);
$data = $this->format_lyric($data);
break;
case 'pic':
$data = $api->format(true)->pic($id);
$data = json_decode($data, true)["url"];
break;
// case 'search':
// $data = $api->format(true)->search($id);
// $data=json_decode($data, true);
// break;
default:
$data = $api->format(true)->url($id);
$data = json_decode($data, true)["url"];
$data = $this->song_url($data);
break;
}
return $data;
}
private function format_playlist($data) {
$server = $this->server;
$api_url = $this->api_url;
$data = json_decode($data);
$playlist = array();
foreach ((array)$data as $value) {
$name = $value->name;
$artists = implode(" / ", (array)$value->artist);
$mp3_url = "$api_url?server=$server&type=url&id=" . $value->url_id . '&meting_nonce=' . wp_create_nonce('url#:' . $value->url_id);
$cover = "$api_url?server=$server&type=pic&id=" . $value->pic_id . '&meting_nonce=' . wp_create_nonce('pic#:' . $value->url_id);
$lyric = "$api_url?server=$server&type=lyric&id=" . $value->lyric_id . '&meting_nonce=' . wp_create_nonce('lyric#:' . $value->url_id);
$playlist[] = array(
"name" => $name,
"artist" => $artists,
"url" => $mp3_url,
"cover" => $cover,
"lrc" => $lyric
);
}
return $playlist;
}
private function song_url($url){
$server = $this->server;
if ($server == 'netease') {
$url = str_replace('://m7c.', '://m7.', $url);
$url = str_replace('://m8c.', '://m8.', $url);
$url = str_replace('http://m8.', 'https://m9.', $url);
$url = str_replace('http://m7.', 'https://m9.', $url);
$url = str_replace('http://m10.', 'https://m10.', $url);
}elseif ($server == 'xiami') {
$url = str_replace('http://', 'https://', $url);
}elseif ($server == 'baidu') {
$url = str_replace('http://zhangmenshiting.qianqian.com', 'https://gss3.baidu.com/y0s1hSulBw92lNKgpU_Z2jR7b2w6buu', $url);
}else{
$url = $url;
}
return $url;
}
private function format_lyric($data) {
$server = $this->server;
$data = json_decode($data, true);
$data = $this->lrctran($data['lyric'], $data['tlyric']);
if (empty($data)) {
$data = "[00:00.000]此歌曲暂无歌词,请您欣赏";
}
if ($server === 'tencent') {
$data = html_entity_decode($data, ENT_QUOTES | ENT_HTML5);
}
return $data;
}
private function lrctran($lyric, $tlyric) {
$lyric = $this->lrctrim($lyric);
$tlyric = $this->lrctrim($tlyric);
$len1 = count($lyric);
$len2 = count($tlyric);
$result = "";
for ($i = 0, $j = 0; $i < $len1 && $j < $len2; $i++) {
while ($lyric[$i][0] > $tlyric[$j][0] && $j + 1 < $len2) {
$j++;
}
if ($lyric[$i][0] == $tlyric[$j][0]) {
$tlyric[$j][2] = str_replace('/', '', $tlyric[$j][2]);
if (!empty($tlyric[$j][2])) {
$lyric[$i][2] .= " ({$tlyric[$j][2]})";
}
$j++;
}
}
for ($i = 0; $i < $len1; $i++) {
$t = $lyric[$i][0];
$result .= sprintf("[%02d:%02d.%03d]%s\n", $t / 60000, $t % 60000 / 1000, $t % 1000, $lyric[$i][2]);
}
return $result;
}
private function lrctrim($lyrics) {
$lyrics = explode("\n", $lyrics);
$data = array();
foreach ($lyrics as $key => $lyric) {
preg_match('/\[(\d{2}):(\d{2}[\.:]?\d*)]/', $lyric, $lrcTimes);
$lrcText = preg_replace('/\[(\d{2}):(\d{2}[\.:]?\d*)]/', '', $lyric);
if (empty($lrcTimes)) {
continue;
}
$lrcTimes = intval($lrcTimes[1]) * 60000 + intval(floatval($lrcTimes[2]) * 1000);
$lrcText = preg_replace('/\s\s+/', ' ', $lrcText);
$lrcText = trim($lrcText);
$data[] = array($lrcTimes, $key, $lrcText);
}
sort($data);
return $data;
}
}

68
inc/classes/Bilibili.php Normal file
View File

@ -0,0 +1,68 @@
<?php
namespace Sakura\API;
class Bilibili
{
private $uid;
private $cookies;
public function __construct() {
$this->uid = akina_option('bilibili_id');
$this->cookies = akina_option('bilibili_cookie');
}
public function get_the_bgm_items($page = 1) {
$uid = $this->uid;
$cookies = $this->cookies;
$url = 'https://api.bilibili.com/x/space/bangumi/follow/list?type=1&pn=' . $page . '&ps=15&follow_status=0&vmid=' . $uid;
$args = array(
'headers' => array(
'Cookie' => $cookies,
'Host' => 'api.bilibili.com',
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97'
)
);
$response = wp_remote_get($url, $args);
$bgmdata = json_decode($response["body"])->data;
return json_encode($bgmdata);
}
public function get_bgm_items($page = 1) {
$bgm = json_decode($this->get_the_bgm_items($page), true);
$totalpage = $bgm["total"] / 15;
if ($totalpage - $page < 0) {
$next = '<span>共追番' . $bgm["total"] . '部,继续加油吧!٩(ˊᗜˋ*)و</span>';
} else {
$next = '<a class="bangumi-next" href="' . rest_url('sakura/v1/bangumi/bilibili') . '?page=' . ++$page . '"><i class="fa fa-bolt" aria-hidden="true"></i> NEXT </a>';
}
$lists = $bgm["list"];
$html = "";
foreach ((array)$lists as $list) {
if (preg_match('/看完/m', $list["progress"], $matches_finish)) {
$percent = 100;
} else {
preg_match('/第(\d+)./m', $list['progress'], $matches_progress);
preg_match('/第(\d+)./m', $list["new_ep"]['index_show'], $matches_new);
$progress = is_numeric($matches_progress[1]) ? $matches_progress[1] : 0;
$total = is_numeric($matches_new[1]) ? $matches_new[1] : $list['total_count'];
$percent = $progress / $total * 100;
}
$html .= '<div class="column">
<a class="bangumi-item" href="https://bangumi.bilibili.com/anime/' . $list['season_id'] . '/" target="_blank" rel="nofollow">
<img class="bangumi-image" src="' . str_replace('http://', 'https://', $list['cover']) . '"/>
<div class="bangumi-info">
<h3 class="bangumi-title" title="' . $list['title'] . '">' . $list['title'] . '</h2>
<div class="bangumi-summary"> ' . $list['evaluate'] . ' </div>
<div class="bangumi-status">
<div class="bangumi-status-bar" style="width: ' . $percent . '%"></div>
<p>' . $list['new_ep']['index_show'] . '</p>
</div>
</div>
</a>
</div>';
}
$html .= '</div><br><div id="bangumi-pagination">' . $next . '</div>';
return $html;
}
}

103
inc/classes/Cache.php Normal file
View File

@ -0,0 +1,103 @@
<?php
namespace Sakura\API;
class Cache
{
public static function search_json() {
global $more;
$vowels = array("[", "{", "]", "}", "<", ">", "\r\n", "\r", "\n", "-", "'", '"', '`', " ", ":", ";", '\\', " ", "toc");
$regex = <<<EOS
/<\/?[a-zA-Z]+("[^"]*"|'[^']*'|[^'">])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m
EOS;
$more = 1;
$output = array();
$posts = new \WP_Query('posts_per_page=-1&post_status=publish&post_type=post');
while ($posts->have_posts()): $posts->the_post();
$output[] = array(
"type" => "post",
"link" => get_permalink(),
"title" => get_the_title(),
"comments" => get_comments_number('0', '1', '%'),
"text" => str_replace($vowels, " ", preg_replace($regex, ' ', apply_filters('the_content', get_the_content())))
);
endwhile;
wp_reset_postdata();
$pages = new \WP_Query('posts_per_page=-1&post_status=publish&post_type=page');
while ($pages->have_posts()): $pages->the_post();
$output[] = array(
"type" => "page",
"link" => get_permalink(),
"title" => get_the_title(),
"comments" => get_comments_number('0', '1', '%'),
"text" => str_replace($vowels, " ", preg_replace($regex, ' ', apply_filters('the_content', get_the_content())))
);
endwhile;
wp_reset_postdata();
$tags = get_tags();
foreach ($tags as $tag) {
$output[] = array(
"type" => "tag",
"link" => get_term_link($tag),
"title" => $tag->name,
"comments" => "",
"text" => ""
);
}
$categories = get_categories();
foreach ($categories as $category) {
$output[] = array(
"type" => "category",
"link" => get_term_link($category),
"title" => $category->name,
"comments" => "",
"text" => ""
);
}
if (akina_option('live_search_comment')) {
$comments = get_comments();
foreach ($comments as $comment) {
$is_private = get_comment_meta($comment->comment_ID, '_private', true);
$output[] = array(
"type" => "comment",
"link" => get_comment_link($comment),
"title" => get_the_title($comment->comment_post_ID),
"comments" => "",
"text" => $is_private ? ($comment->comment_author . ": " . __('The comment is private', 'sakura')) : str_replace($vowels, ' ', preg_replace($regex, ' ', $comment->comment_author . "" . $comment->comment_content))
);
}
}
return $output;
}
public static function update_database() {
global $wpdb;
$sakura_table_name = $wpdb->base_prefix . 'sakura';
$img_domain = akina_option('cover_cdn') ? akina_option('cover_cdn') : get_template_directory();
$manifest = file_get_contents($img_domain . "/manifest/manifest.json");
if ($manifest) {
$manifest = array(
"mate_key" => "manifest_json",
"mate_value" => $manifest
);
$time = array(
"mate_key" => "json_time",
"mate_value" => date("Y-m-d H:i:s", time())
);
$wpdb->query("DELETE FROM $sakura_table_name WHERE `mate_key` ='manifest_json'");
$wpdb->query("DELETE FROM $sakura_table_name WHERE `mate_key` ='json_time'");
$wpdb->insert($sakura_table_name, $manifest);
$wpdb->insert($sakura_table_name, $time);
$output = "manifest.json has been stored into database.";
} else {
$output = "manifest.json not found, please ensure your url ($img_domain) is corrent.";
}
return $output;
}
}

165
inc/classes/Images.php Normal file
View File

@ -0,0 +1,165 @@
<?php
namespace Sakura\API;
class Images
{
private $chevereto_api_key;
private $imgur_client_id;
private $smms_client_id;
public function __construct() {
$this->chevereto_api_key = akina_option('chevereto_api_key');
$this->imgur_client_id = akina_option('imgur_client_id');
$this->smms_client_id = akina_option('smms_client_id');
}
/**
* Chevereto upload interface
*/
public function Chevereto_API($image) {
$upload_url = akina_option('cheverto_url') . '/api/1/upload';
$args = array(
'body' => array(
'source' => base64_encode($image),
'key' => $this->chevereto_api_key,
),
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->status_txt == 'OK' && $reply->status_code == 200) {
$status = 200;
$success = true;
$message = "success";
$link = $reply->image->image->url;
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = $reply->status_code;
$success = false;
$message = $reply->error->message;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
/**
* Imgur upload interface
*/
public function Imgur_API($image) {
$upload_url = akina_option('imgur_upload_image_proxy');
$args = array(
'headers' => array(
'Authorization' => 'Client-ID ' . $this->imgur_client_id,
),
'body' => array(
'image' => base64_encode($image),
),
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->success && $reply->status == 200) {
$status = 200;
$success = true;
$message = "success";
$link = $reply->data->link;
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = $reply->status;
$success = false;
$message = $reply->data->error;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
/**
* smms upload interface
*/
public function SMMS_API($image) {
$client_id = $this->smms_client_id;
$upload_url = "https://sm.ms/api/v2/upload";
$filename = $image['cmt_img_file']['name'];
$filedata = $image['cmt_img_file']['tmp_name'];
$Boundary = wp_generate_password();
$bits = file_get_contents($filedata);
$args = array(
"headers" => "Content-Type: multipart/form-data; boundary=$Boundary\r\n\r\nAuthorization: Basic $client_id\r\n\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97",
"body" => "--$Boundary\r\nContent-Disposition: form-data; name=\"smfile\"; filename=\"$filename\"\r\n\r\n$bits\r\n\r\n--$Boundary--"
);
$response = wp_remote_post($upload_url, $args);
$reply = json_decode($response["body"]);
if ($reply->success && $reply->code == 'success') {
$status = 200;
$success = true;
$message = $reply->message;
$link = $reply->data->url;
$proxy = akina_option('cmt_image_proxy') . $link;
} else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) {
$status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code并单独把 url 放进一个字段
$success = true;
$message = $reply->message;
$link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message);
$proxy = akina_option('cmt_image_proxy') . $link;
} else {
$status = 400;
$success = false;
$message = $reply->message;
$link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
$proxy = akina_option('cmt_image_proxy') . $link;
}
$output = array(
'status' => $status,
'success' => $success,
'message' => $message,
'link' => $link,
'proxy' => $proxy,
);
return $output;
}
public static function cover_gallery() {
if (akina_option('cover_cdn_options') == "type_2") {
$img_array = glob(get_template_directory() . "/manifest/gallary/*.{gif,jpg,png}", GLOB_BRACE);
$img = array_rand($img_array);
$imgurl = trim($img_array[$img]);
$imgurl = str_replace(get_template_directory(), get_template_directory_uri(), $imgurl);
} elseif (akina_option('cover_cdn_options') == "type_3") {
$imgurl = akina_option('cover_cdn');
} else {
global $sakura_image_array;
$img_array = json_decode($sakura_image_array, true);
$img = array_rand($img_array);
$img_domain = akina_option('cover_cdn') ? akina_option('cover_cdn') : get_template_directory_uri();
if (strpos($_SERVER['HTTP_ACCEPT'], 'image/webp')) {
$imgurl = $img_domain . "/manifest/" . $img_array[$img]["webp"][0];
} else {
$imgurl = $img_domain . "/manifest/" . $img_array[$img]["jpeg"][0];
}
}
return $imgurl;
}
}

1365
inc/classes/Meting.php Executable file

File diff suppressed because it is too large Load Diff

40
inc/classes/QQ.php Normal file
View File

@ -0,0 +1,40 @@
<?php
namespace Sakura\API;
class QQ
{
public static function get_qq_info($qq) {
$get_info = file_get_contents('http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?get_nick=1&uins=' . $qq);
$get_info = mb_convert_encoding($get_info, "UTF-8", "GBK");
$name = json_decode(substr($get_info, 17, -1), true);
if ($name) {
$output = array(
'status' => 200,
'success' => true,
'message' => 'success',
'avatar' => 'https://q.qlogo.cn/headimg_dl?dst_uin=' . $qq . '&spec=100',
'name' => $name[$qq][6],
);
} else {
$output = array(
'status' => 404,
'success' => false,
'message' => 'QQ number not exist.'
);
}
return $output;
}
public static function get_qq_avatar($encrypted) {
global $sakura_privkey;
if (isset($encrypted)) {
$iv = str_repeat($sakura_privkey, 2);
$encrypted = base64_decode(urldecode($encrypted));
$qq_number = openssl_decrypt($encrypted, 'aes-128-cbc', $sakura_privkey, 0, $iv);
preg_match('/^\d{3,}$/', $qq_number, $matches);
$imgurl = 'https://q2.qlogo.cn/headimg_dl?dst_uin=' . $matches[0] . '&spec=100';
return $imgurl;
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -67,8 +67,9 @@ mashiro_option.jsdelivr_css_src = "<?php echo get_template_directory_uri() ?>/cd
<?php } else { ?>
mashiro_option.jsdelivr_css_src = "https://cdn.jsdelivr.net/gh/mashirozx/Sakura@<?php echo SAKURA_VERSION; ?>/cdn/css/lib.min.css";
<?php } ?>
<?php if (akina_option('playlist_id', '')): ?>
<?php if (akina_option('aplayer_server') != 'off'): ?>
mashiro_option.float_player_on = true;
mashiro_option.meting_api_url = "<?php echo rest_url('sakura/v1/meting/aplayer'); ?>";
<?php endif; ?>
mashiro_option.cover_api = "<?php echo rest_url('sakura/v1/image/cover'); ?>";

View File

@ -17,6 +17,7 @@ mashiro_global.ini = new function () {
coverVideoIni();
checkskinSecter();
scrollBar();
load_bangumi();
}
this.pjax = function () { // pjax reload functions (pjax 重载函数)
pjaxInit();
@ -25,6 +26,7 @@ mashiro_global.ini = new function () {
copy_code_block();
coverVideoIni();
checkskinSecter();
load_bangumi();
}
}
@ -77,6 +79,12 @@ function post_list_show_animation() {
function callback(entries) {
entries.forEach((article) => {
if (!window.IntersectionObserver) {
article.target.style.willChange = 'auto';
if( article.target.classList.contains("post-list-show") === false){
article.target.classList.add("post-list-show");
}
} else {
if (article.target.classList.contains("post-list-show")) {
article.target.style.willChange = 'auto';
io.unobserve(article.target)
@ -87,6 +95,7 @@ function post_list_show_animation() {
io.unobserve(article.target)
}
}
}
})
}
articles.forEach((article) => {
@ -320,10 +329,51 @@ function checkBgImgCookie() {
$("#" + bgurl).click();
}
}
function checkDarkModeCookie() {
var dark = getCookie("dark"),
today = new Date(),
hour = today.getHours();
if ((!dark && (hour > 21 || hour < 7) ) || (dark == '1' && (hour >= 22 || hour <= 6))) {
setTimeout(function () {
$("#dark-bg").click();
}, 100);
$("#moblieDarkLight").html('<i class="fa fa-sun-o" aria-hidden="true"></i>');
console.log('夜间模式开启');
} else {
if (document.body.clientWidth > 860) {
setTimeout(function () {
checkBgImgCookie();
}, 100);
} else {
$("html").css("background", "unset");
$("body").removeClass("dark");
$("#moblieDarkLight").html('<i class="fa fa-moon-o" aria-hidden="true"></i>');
setCookie("dark", "0", 0.33);
}
console.log('夜间模式关闭');
}
}
if (!getCookie("darkcache") && (new Date().getHours() > 21 || new Date().getHours() < 7)) {
removeCookie("dark");
setCookie("darkcache", "cached", 0.4);
}
setTimeout(function() {
checkDarkModeCookie();
}, 100);
function mobile_dark_light() {
if ($("body").hasClass("dark")) {
$("html").css("background", "unset");
$("body").removeClass("dark");
$("#moblieDarkLight").html('<i class="fa fa-moon-o" aria-hidden="true"></i>');
setCookie("dark", "0", 0.33);
} else {
$("html").css("background", "#31363b");
$("#moblieDarkLight").html('<i class="fa fa-sun-o" aria-hidden="true"></i>');
$("body").addClass("dark");
setCookie("dark", "1", 0.33);
}
}
function no_right_click() {
@ -336,13 +386,12 @@ $(document).ready(function () {
function checkskin_bg(a) {
return a == "none" ? "" : a
}
function changeBG() {
var cached = $(".menu-list");
cached.find("li").each(function () {
var tagid = this.id;
cached.on("click", "#" + tagid, function () {
if (tagid == "white-bg") {
if (tagid == "white-bg" || tagid == "dark-bg") {
mashiro_global.variables.skinSecter = true;
checkskinSecter();
} else {
@ -350,36 +399,50 @@ $(document).ready(function () {
checkskinSecter();
}
if (tagid == "dark-bg") {
$("#night-mode-cover").css("visibility", "visible");
} else
$("#night-mode-cover").css("visibility", "hidden");
$("html").css("background", "#31363b");
$(".site-content").css("background-color", "#fff");
$("body").addClass("dark");
setCookie("dark", "1", 0.33);
} else{
$("html").css("background", "unset");
$("body").removeClass("dark");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
setCookie("dark", "0", 0.33);
setCookie("bgImgSetting", tagid, 30);
}
switch (tagid) {
case "white-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg0) + ")");
$(".site-content").css("background-color", "#fff");
break;
case "sakura-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg1) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "gribs-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg2) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "pixiv-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg3) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "KAdots-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg4) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "totem-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg5) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "bing-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg6) + ")");
$(".site-content").css("background-color", "rgba(255, 255, 255, .8)");
break;
case "dark-bg":
$("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg7) + ")");
break;
// case "dark-bg":
// $("body").css("background-image", "url(" + checkskin_bg(mashiro_option.skin_bg7) + ")");
// break;
}
setCookie("bgImgSetting", tagid, 30);
closeSkinMenu();
});
});
@ -421,14 +484,9 @@ $(document).ready(function () {
});
function topFunction() {
if ('scrollBehavior' in document.documentElement.style) {
window.scrollTo({
top: 0,
behavior: "smooth"
$('body,html').animate({
scrollTop: 0
})
} else {
window.scrollSmoothTo(0)
}
}
function timeSeriesReload(flag) {
@ -817,7 +875,7 @@ if (mashiro_option.float_player_on) {
}
});
}
var b = 'https://api.i-meto.com/meting/api?server=:server&type=:type&id=:id&r=:r';
var b = mashiro_option.meting_api_url + '?server=:server&type=:type&id=:id&_wpnonce=' + Poi.nonce;
'undefined' != typeof meting_api && (b = meting_api);
for (var f = 0; f < aplayers.length; f++) try {
aplayers[f].destroy()
@ -830,7 +888,7 @@ if (mashiro_option.float_player_on) {
f = d.dataset.id;
if (f) {
var g = d.dataset.api || b;
g = g.replace(':server', d.dataset.server), g = g.replace(':type', d.dataset.type), g = g.replace(':id', d.dataset.id), g = g.replace(':auth', d.dataset.auth), g = g.replace(':r', Math.random());
g = g.replace(':server', d.dataset.server), g = g.replace(':type', d.dataset.type), g = g.replace(':id', d.dataset.id);
var h = new XMLHttpRequest;
h.onreadystatechange = function () {
if (4 === h.readyState && (200 <= h.status && 300 > h.status || 304 === h.status)) {
@ -929,27 +987,6 @@ function getqqinfo() {
}
});
}
// $.ajax({
// type: 'get',
// url: mashiro_option.qq_avatar_api_url + '?type=getqqavatar&qq=' + qq,
// dataType: 'jsonp',
// jsonp: 'callback',
// jsonpCallback: 'qqavatarCallBack',
// success: function (data) {
// $('div.comment-user-avatar img').attr('src', data[qq]);
// setCookie('user_avatar', data[qq], 30);
// },
// error: function () {
// cached.filter('#qq,#email,#url').val('');
// if (!cached.filter('#qq').val()) {
// $('.qq-check').css('display', 'none');
// $('.gravatar-check').css('display', 'block');
// setCookie('user_qq', '', 30);
// $('div.comment-user-avatar img').attr('src', get_gravatar(cached.filter('#email').val(), 80));
// setCookie('user_avatar', get_gravatar(cached.filter('#email').val(), 80), 30);
// }
// }
// });
});
if (getCookie('user_avatar') && getCookie('user_email') && getCookie('is_user_qq') == 'no' && !getCookie('user_qq_email')) {
$('div.comment-user-avatar img').attr('src', getCookie('user_avatar'));
@ -1011,6 +1048,27 @@ setTimeout(function () {
activate_widget();
}, 100);
function load_bangumi() {
if ($("section").hasClass("bangumi")) {
$('body').on('click', '#bangumi-pagination a', function () {
$("#bangumi-pagination a").addClass("loading").text("");
var xhr = new XMLHttpRequest();
xhr.open('POST', this.href + "&_wpnonce=" + Poi.nonce, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var html = JSON.parse(xhr.responseText);
$("#bangumi-pagination").remove();
$(".row").append(html);
}else{
$("#bangumi-pagination a").removeClass("loading").html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> ERROR ');
}
};
xhr.send();
return false;
});
}
}
mashiro_global.ini.normalize();
loadCSS(mashiro_option.jsdelivr_css_src);
loadCSS(mashiro_option.entry_content_theme_src);
@ -1394,7 +1452,7 @@ var home = location.href,
$('html').css('overflow-y', 'hidden');
if (mashiro_option.live_search) {
var QueryStorage = [];
search_a(Poi.api + "sakura/v1/cache_search/json");
search_a(Poi.api + "sakura/v1/cache_search/json?_wpnonce=" + Poi.nonce);
var otxt = addComment.I("search-input"),
list = addComment.I("PostlistBox"),
@ -1594,7 +1652,7 @@ var home = location.href,
var tempScrollTop = $(window).scrollTop();
$(window).scrollTop(tempScrollTop);
$body.animate({
scrollTop: tempScrollTop + 300
scrollTop: tempScrollTop + 100
}, 666)
} else {
$("#pagination").html("<span>很高兴你翻到这里,但是真的没有了...</span>");
@ -1763,14 +1821,17 @@ var home = location.href,
cheight = window.innerHeight,
pc_to_top = document.querySelector(".cd-top"),
mb_to_top = document.querySelector("#moblieGoTop"),
mb_dark_light = document.querySelector("#moblieDarkLight"),
changeskin = document.querySelector(".changeSkin-gear");
$(window).scroll(function() {
if (cwidth <= 860) {
if ($(this).scrollTop() > 20) {
mb_to_top.style.transform = "scale(1)";
mb_dark_light.style.transform = "scale(1)";
} else {
mb_to_top.style.transform = "scale(0)";
mb_dark_light.style.transform = "scale(0)";
}
} else {
if ($(this).scrollTop() > 100) {
@ -1796,6 +1857,12 @@ var home = location.href,
pc_to_top.onclick = function() {
topFunction();
}
mb_to_top.onclick = function() {
topFunction();
}
mb_dark_light.onclick = function() {
mobile_dark_light();
}
}
}
$(function () {

Binary file not shown.

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Sakura\n"
"POT-Creation-Date: 2020-02-13 23:59+0800\n"
"PO-Revision-Date: 2020-02-13 23:59+0800\n"
"POT-Creation-Date: 2020-04-06 17:56+0800\n"
"PO-Revision-Date: 2020-04-06 17:56+0800\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en_US\n"
@ -142,74 +142,74 @@ msgstr ""
msgid "Nav Menus"
msgstr ""
#: functions.php:420 inc/theme_plus.php:186 layouts/authorprofile.php:11
#: functions.php:423 inc/theme_plus.php:186 layouts/authorprofile.php:11
#: options.php:121
msgid "Author"
msgstr ""
#: functions.php:420
#: functions.php:423
msgid "Blogger"
msgstr ""
#: functions.php:424
#: functions.php:427
msgid "Location"
msgstr ""
#: functions.php:428
#: functions.php:431
msgid "Private"
msgstr ""
#: functions.php:430
#: functions.php:433
msgid "Yes"
msgstr ""
#: functions.php:432
#: functions.php:435
msgid "No"
msgstr ""
#: functions.php:435
#: functions.php:438
msgid "Edit"
msgstr ""
#: functions.php:524
#: functions.php:527
msgid ""
"Please install pulgin <a href=\"https://wordpress.org/plugins/wp-statistics/"
"\" target=\"_blank\">WP-Statistics</a>"
msgstr ""
#: functions.php:574
#: functions.php:577
msgid "This guy is so lazy ╮(╯▽╰)╭"
msgstr ""
#: functions.php:1329
#: functions.php:1334
msgid "All expand/collapse"
msgstr ""
#: functions.php:1350 options.php:834
#: functions.php:1355 options.php:834
msgid " "
msgstr ""
#: functions.php:1354
#: functions.php:1359
msgid " post(s)"
msgstr ""
#: functions.php:1377 functions.php:1380 inc/theme_plus.php:478
#: functions.php:1382 functions.php:1385 inc/theme_plus.php:478
msgid "Dashboard"
msgstr ""
#: functions.php:1606
#: functions.php:1611
msgid "<b>ERROR</b>: This email domain (<b>@"
msgstr ""
#: functions.php:1711
#: functions.php:1716
msgid "QQ"
msgstr ""
#: functions.php:1781
#: functions.php:1788
msgid "Sidebar"
msgstr ""
#: functions.php:1893
#: functions.php:1900
msgid ""
"<b> For a better experience, please do not set <a href=\"/wp-admin/options-"
"permalink.php\"> permalink </a> as plain. To do this, you may need to "
@ -222,10 +222,6 @@ msgstr ""
msgid "page %s "
msgstr ""
#: inc/api.php:301 inc/theme_plus.php:727
msgid "The comment is private"
msgstr ""
#: inc/categories-images.php:45 inc/categories-images.php:66
msgid "category/tag image"
msgstr ""
@ -247,6 +243,10 @@ msgstr ""
msgid "no image"
msgstr ""
#: inc/classes/Cache.php:70 inc/theme_plus.php:727
msgid "The comment is private"
msgstr ""
#: inc/options-framework.php:182 inc/options-framework.php:183
#: inc/options-framework.php:412
msgid "Sakura Options"
@ -923,7 +923,7 @@ msgstr ""
msgid "Whether to turn on the top-feature"
msgstr ""
#: options.php:446 options.php:1085
#: options.php:446 options.php:1126
msgid "Default on"
msgstr ""
@ -1380,167 +1380,239 @@ msgid "Footer float music player"
msgstr ""
#: options.php:926
msgid ""
"If you don't need the player just leave it blank.Fill in the \"song list\" "
"ID of Netease Cloud Music, eg: https://music.163.com/#/playlist?"
"id=2288037900 The ID is 2288037900"
msgid "Choose which platform you'll use."
msgstr ""
#: options.php:931
msgid "Netease Cloud Music (default)"
msgstr ""
#: options.php:932
msgid "Version Control"
msgid "Xiami Music"
msgstr ""
#: options.php:933
msgid "KuGou Music"
msgstr ""
#: options.php:934
msgid "Baidu Music"
msgstr ""
#: options.php:935
msgid "QQ Music (may fail) "
msgstr ""
#: options.php:936
msgid "Off"
msgstr ""
#: options.php:940
msgid "Song list ID"
msgstr ""
#: options.php:941
msgid ""
"Fill in the \"song list\" ID, eg: https://music.163.com/#/playlist?"
"id=2288037900 The ID is 2288037900"
msgstr ""
#: options.php:947
msgid "Netease Cloud Music cookie"
msgstr ""
#: options.php:948
msgid ""
"For Netease Cloud Music, fill in your vip account's cookies if you want to "
"play special tracks.<b>If you don't know what does mean, left it blank.</b>"
msgstr ""
#: options.php:954
msgid "Version Control"
msgstr ""
#: options.php:955
msgid ""
"Used to update frontend cookies and browser caches, any string can be used"
msgstr ""
#: options.php:939
#: options.php:961
msgid "Enable PJAX (recommand on)"
msgstr ""
#: options.php:940
#: options.php:962
msgid "The principle is the same as Ajax"
msgstr ""
#: options.php:946
#: options.php:968
msgid "Enable NProgress progress bar"
msgstr ""
#: options.php:947 options.php:954 options.php:961
#: options.php:969 options.php:976 options.php:983
msgid "Default off, check on"
msgstr ""
#: options.php:953
#: options.php:975
msgid "Enable sidebar widget"
msgstr ""
#: options.php:960
#: options.php:982
msgid "Enable Announcement"
msgstr ""
#: options.php:967
#: options.php:989
msgid "Announcement content"
msgstr ""
#: options.php:968
#: options.php:990
msgid ""
"Announcement content, the text exceeds 142 bytes will be scrolled display "
"(mobile device is invalid)"
msgstr ""
#: options.php:974
#: options.php:995
msgid "Bilibili UID"
msgstr ""
#: options.php:996
msgid ""
"Fill in your UID, eg.https://space.bilibili.com/13972644/, only fill in with "
"the number part."
msgstr ""
#: options.php:1002
msgid "Bilibili Cookie"
msgstr ""
#: options.php:1003
msgid ""
"Fill in your Cookies, go to your bilibili homepage, you can get cookies in "
"brownser network pannel with pressing F12. If left this blank, you'll not "
"get the progress."
msgstr ""
#: options.php:1008
msgid "The categories of articles that don't not show on homepage"
msgstr ""
#: options.php:975 options.php:982
#: options.php:1009 options.php:1016
msgid "Fill in category ID, multiple IDs are divided by a comma \",\""
msgstr ""
#: options.php:981
#: options.php:1015
msgid "Images category"
msgstr ""
#: options.php:988
#: options.php:1022
msgid "Statistics Interface"
msgstr ""
#: options.php:993
#: options.php:1027
msgid ""
"WP-Statistics plugin (Professional statistics, can exclude invalid access)"
msgstr ""
#: options.php:994
#: options.php:1028
msgid "Theme built-in (simple statistics, calculate each page access request)"
msgstr ""
#: options.php:998
#: options.php:1032
msgid "Statistical data display format"
msgstr ""
#: options.php:1003
#: options.php:1037
msgid "23333 Views (default)"
msgstr ""
#: options.php:1004
#: options.php:1038
msgid "23,333 Views (britain)"
msgstr ""
#: options.php:1005
#: options.php:1039
msgid "23 333 Views (french)"
msgstr ""
#: options.php:1006
#: options.php:1040
msgid "23k Views (chinese)"
msgstr ""
#: options.php:1010
#: options.php:1044
msgid "Gravatar avatar proxy"
msgstr ""
#: options.php:1045
msgid ""
"A front-ed proxy for Gravatar, eg. gravatar.2heng.xin/avatar . Leave it "
"blank if you do not need."
msgstr ""
#: options.php:1051
msgid "Comment image upload API"
msgstr ""
#: options.php:1015
#: options.php:1056
msgid "Imgur (https://imgur.com)"
msgstr ""
#: options.php:1016
#: options.php:1057
msgid "SM.MS (https://sm.ms)"
msgstr ""
#: options.php:1017
#: options.php:1058
msgid "Chevereto (https://chevereto.com)"
msgstr ""
#: options.php:1021
#: options.php:1062
msgid "Imgur Client ID"
msgstr ""
#: options.php:1022
#: options.php:1063
msgid ""
"Register your application <a href=\"https://api.imgur.com/oauth2/addclient"
"\">here</a>, note we only need the Client ID here."
msgstr ""
#: options.php:1028
#: options.php:1069
msgid "SM.MS Secret Token"
msgstr ""
#: options.php:1029
#: options.php:1070
msgid ""
"Register your application <a href=\"https://sm.ms/home/apitoken\">here</a>."
msgstr ""
#: options.php:1035
#: options.php:1076
msgid "Chevereto API v1 key"
msgstr ""
#: options.php:1036
#: options.php:1077
msgid "Get your API key here: "
msgstr ""
#: options.php:1042
#: options.php:1083
msgid "Chevereto URL"
msgstr ""
#: options.php:1043
#: options.php:1084
msgid ""
"Your Chevereto homepage url, no slash in the end, eg. https://your.cherverto."
"com"
msgstr ""
#: options.php:1049
#: options.php:1090
msgid "Comment images proxy"
msgstr ""
#: options.php:1050
#: options.php:1091
msgid ""
"A front-ed proxy for the uploaded images. Leave it blank if you do not need."
msgstr ""
#: options.php:1056
#: options.php:1097
msgid "Imgur upload proxy"
msgstr ""
#: options.php:1057
#: options.php:1098
msgid ""
"A back-ed proxy to upload images. You may set a self hosted proxy with "
"Nginx, following my <a href=\"https://2heng.xin/2018/06/06/javascript-upload-"
@ -1550,151 +1622,151 @@ msgid ""
"a>】"
msgstr ""
#: options.php:1063
#: options.php:1104
msgid "Enable live search"
msgstr ""
#: options.php:1064
#: options.php:1105
msgid ""
"Real-time search in the foreground, call the Rest API to update the cache "
"every hour, you can manually set the cache time in functions.php"
"every hour, you can manually set the cache time in api.php"
msgstr ""
#: options.php:1070
#: options.php:1111
msgid "Include comments in live search"
msgstr ""
#: options.php:1071
#: options.php:1112
msgid ""
"Search for comments in real-time search (not recommended if there are too "
"many comments on the site)"
msgstr ""
#: options.php:1077
#: options.php:1118
msgid "Enable baguetteBox"
msgstr ""
#: options.php:1078
#: options.php:1119
msgid ""
"Default off<a href=\"https://github.com/mashirozx/Sakura/wiki/Fancybox"
"\">please read wiki</a>"
msgstr ""
#: options.php:1084
#: options.php:1125
msgid "Enable lazyload in posts"
msgstr ""
#: options.php:1091
#: options.php:1132
msgid "lazyload spinner"
msgstr ""
#: options.php:1092
#: options.php:1133
msgid "The placeholder to display when the image loads, fill in the image url"
msgstr ""
#: options.php:1098
#: options.php:1139
msgid "Whether to enable the clipboard copyright"
msgstr ""
#: options.php:1099
#: options.php:1140
msgid ""
"Automatically add a copyright to the clipboard when copying more than 30 "
"bytes, which is enabled by default."
msgstr ""
#: options.php:1105
#: options.php:1146
msgid "Email address prefix"
msgstr ""
#: options.php:1106
#: options.php:1147
msgid ""
"For sending system mail, the sender address displayed in the user's mailbox, "
"do not use Chinese, the default system email address is bibi@your_domain_name"
msgstr ""
#: options.php:1112
#: options.php:1153
msgid "Comments reply notification"
msgstr ""
#: options.php:1113
#: options.php:1154
msgid ""
"WordPress will use email to notify users when their comments receive a reply "
"by default. Tick this item allows users to set their own comments reply "
"notification"
msgstr ""
#: options.php:1119
#: options.php:1160
msgid "Administrator comment notification"
msgstr ""
#: options.php:1120
#: options.php:1161
msgid ""
"Whether to use email notification when the administrator's comments receive "
"a reply"
msgstr ""
#: options.php:1126
#: options.php:1167
msgid "Enable private comment"
msgstr ""
#: options.php:1127
#: options.php:1168
msgid "Allow users to set their own comments to be invisible to others"
msgstr ""
#: options.php:1133
#: options.php:1174
msgid "Human verification"
msgstr ""
#: options.php:1134
#: options.php:1175
msgid "Enable human verification"
msgstr ""
#: options.php:1140
#: options.php:1181
msgid "QQ avatar link encryption"
msgstr ""
#: options.php:1141
#: options.php:1182
msgid "Do not display the user's qq avatar links directly."
msgstr ""
#: options.php:1146
#: options.php:1187
msgid "Off (default)"
msgstr ""
#: options.php:1147
#: options.php:1188
msgid "use redirect (general security)"
msgstr ""
#: options.php:1148
#: options.php:1189
msgid "fetch data at backend (high security)"
msgstr ""
#: options.php:1149
#: options.php:1190
msgid "fetch data at backend (high securityslow)"
msgstr ""
#: options.php:1153
#: options.php:1194
msgid "Comment UA infomation"
msgstr ""
#: options.php:1154
#: options.php:1195
msgid ""
"Check to enable, display the user's browser, operating system information"
msgstr ""
#: options.php:1160
#: options.php:1201
msgid "Enable disqus"
msgstr ""
#: options.php:1161
#: options.php:1202
msgid "Enable disqus for comment"
msgstr ""
#: options.php:1167
#: options.php:1208
msgid "Time Zone adjustment"
msgstr ""
#: options.php:1168
#: options.php:1209
msgid ""
"If the comment has a time difference problem adjust here, fill in an "
"integer, the calculation method: actual_time = display_error_time - "
@ -1753,6 +1825,10 @@ msgstr ""
msgid "Attribution-NonCommercial-ShareAlike 4.0 International"
msgstr ""
#: user/page-bangumi.php:30
msgid "Please fill in the Bilibili UID in Sakura Options."
msgstr ""
#: user/page-login.php:18
msgid "Remember Me"
msgstr ""
@ -1817,7 +1893,11 @@ msgstr ""
msgid "Sign up"
msgstr ""
#: user/page-register.php:92
#: user/page-register.php:90
msgid "Success! Redirecting......"
msgstr ""
#: user/page-register.php:95
msgid "Registration is not open yet."
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
"Project-Id-Version: Sakura\n"
"POT-Creation-Date: 2020-02-13 23:59+0800\n"
"POT-Creation-Date: 2020-04-06 17:55+0800\n"
"PO-Revision-Date: 2019-11-01 14:27+0800\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -142,73 +142,73 @@ msgstr ""
msgid "Nav Menus"
msgstr ""
#: functions.php:420 inc/theme_plus.php:186 layouts/authorprofile.php:11 options.php:121
#: functions.php:423 inc/theme_plus.php:186 layouts/authorprofile.php:11 options.php:121
msgid "Author"
msgstr ""
#: functions.php:420
#: functions.php:423
msgid "Blogger"
msgstr ""
#: functions.php:424
#: functions.php:427
msgid "Location"
msgstr ""
#: functions.php:428
#: functions.php:431
msgid "Private"
msgstr ""
#: functions.php:430
#: functions.php:433
msgid "Yes"
msgstr ""
#: functions.php:432
#: functions.php:435
msgid "No"
msgstr ""
#: functions.php:435
#: functions.php:438
msgid "Edit"
msgstr ""
#: functions.php:524
#: functions.php:527
msgid ""
"Please install pulgin <a href=\"https://wordpress.org/plugins/wp-statistics/\" target=\"_blank"
"\">WP-Statistics</a>"
msgstr ""
#: functions.php:574
#: functions.php:577
msgid "This guy is so lazy ╮(╯▽╰)╭"
msgstr ""
#: functions.php:1329
#: functions.php:1334
msgid "All expand/collapse"
msgstr ""
#: functions.php:1350 options.php:834
#: functions.php:1355 options.php:834
msgid " "
msgstr ""
#: functions.php:1354
#: functions.php:1359
msgid " post(s)"
msgstr ""
#: functions.php:1377 functions.php:1380 inc/theme_plus.php:478
#: functions.php:1382 functions.php:1385 inc/theme_plus.php:478
msgid "Dashboard"
msgstr ""
#: functions.php:1606
#: functions.php:1611
msgid "<b>ERROR</b>: This email domain (<b>@"
msgstr ""
#: functions.php:1711
#: functions.php:1716
msgid "QQ"
msgstr ""
#: functions.php:1781
#: functions.php:1788
msgid "Sidebar"
msgstr ""
#: functions.php:1893
#: functions.php:1900
msgid ""
"<b> For a better experience, please do not set <a href=\"/wp-admin/options-permalink.php\"> "
"permalink </a> as plain. To do this, you may need to configure <a href=\"https://www.wpdaxue."
@ -220,10 +220,6 @@ msgstr ""
msgid "page %s "
msgstr ""
#: inc/api.php:301 inc/theme_plus.php:727
msgid "The comment is private"
msgstr ""
#: inc/categories-images.php:45 inc/categories-images.php:66
msgid "category/tag image"
msgstr ""
@ -244,6 +240,10 @@ msgstr ""
msgid "no image"
msgstr ""
#: inc/classes/Cache.php:70 inc/theme_plus.php:727
msgid "The comment is private"
msgstr ""
#: inc/options-framework.php:182 inc/options-framework.php:183 inc/options-framework.php:412
msgid "Sakura Options"
msgstr ""
@ -911,7 +911,7 @@ msgstr ""
msgid "Whether to turn on the top-feature"
msgstr ""
#: options.php:446 options.php:1085
#: options.php:446 options.php:1126
msgid "Default on"
msgstr ""
@ -1359,160 +1359,231 @@ msgid "Footer float music player"
msgstr ""
#: options.php:926
msgid ""
"If you don't need the player just leave it blank.Fill in the \"song list\" ID of Netease Cloud "
"Music, eg: https://music.163.com/#/playlist?id=2288037900 The ID is 2288037900"
msgid "Choose which platform you'll use."
msgstr ""
#: options.php:931
msgid "Netease Cloud Music (default)"
msgstr ""
#: options.php:932
msgid "Version Control"
msgid "Xiami Music"
msgstr ""
#: options.php:933
msgid "Used to update frontend cookies and browser caches, any string can be used"
msgid "KuGou Music"
msgstr ""
#: options.php:939
msgid "Enable PJAX (recommand on)"
#: options.php:934
msgid "Baidu Music"
msgstr ""
#: options.php:935
msgid "QQ Music (may fail) "
msgstr ""
#: options.php:936
msgid "Off"
msgstr ""
#: options.php:940
msgid "Song list ID"
msgstr ""
#: options.php:941
msgid ""
"Fill in the \"song list\" ID, eg: https://music.163.com/#/playlist?id=2288037900 The ID is "
"2288037900"
msgstr ""
#: options.php:947
msgid "Netease Cloud Music cookie"
msgstr ""
#: options.php:948
msgid ""
"For Netease Cloud Music, fill in your vip account's cookies if you want to play special tracks."
"<b>If you don't know what does mean, left it blank.</b>"
msgstr ""
#: options.php:954
msgid "Version Control"
msgstr ""
#: options.php:955
msgid "Used to update frontend cookies and browser caches, any string can be used"
msgstr ""
#: options.php:961
msgid "Enable PJAX (recommand on)"
msgstr ""
#: options.php:962
msgid "The principle is the same as Ajax"
msgstr ""
#: options.php:946
#: options.php:968
msgid "Enable NProgress progress bar"
msgstr ""
#: options.php:947 options.php:954 options.php:961
#: options.php:969 options.php:976 options.php:983
msgid "Default off, check on"
msgstr ""
#: options.php:953
#: options.php:975
msgid "Enable sidebar widget"
msgstr ""
#: options.php:960
#: options.php:982
msgid "Enable Announcement"
msgstr ""
#: options.php:967
#: options.php:989
msgid "Announcement content"
msgstr ""
#: options.php:968
#: options.php:990
msgid ""
"Announcement content, the text exceeds 142 bytes will be scrolled display (mobile device is "
"invalid)"
msgstr ""
#: options.php:974
msgid "The categories of articles that don't not show on homepage"
#: options.php:995
msgid "Bilibili UID"
msgstr ""
#: options.php:975 options.php:982
msgid "Fill in category ID, multiple IDs are divided by a comma \",\""
#: options.php:996
msgid ""
"Fill in your UID, eg.https://space.bilibili.com/13972644/, only fill in with the number part."
msgstr ""
#: options.php:981
msgid "Images category"
msgstr ""
#: options.php:988
msgid "Statistics Interface"
msgstr ""
#: options.php:993
msgid "WP-Statistics plugin (Professional statistics, can exclude invalid access)"
msgstr ""
#: options.php:994
msgid "Theme built-in (simple statistics, calculate each page access request)"
msgstr ""
#: options.php:998
msgid "Statistical data display format"
#: options.php:1002
msgid "Bilibili Cookie"
msgstr ""
#: options.php:1003
msgid "23333 Views (default)"
msgid ""
"Fill in your Cookies, go to your bilibili homepage, you can get cookies in brownser network "
"pannel with pressing F12. If left this blank, you'll not get the progress."
msgstr ""
#: options.php:1004
msgid "23,333 Views (britain)"
#: options.php:1008
msgid "The categories of articles that don't not show on homepage"
msgstr ""
#: options.php:1005
msgid "23 333 Views (french)"
msgstr ""
#: options.php:1006
msgid "23k Views (chinese)"
msgstr ""
#: options.php:1010
msgid "Comment image upload API"
#: options.php:1009 options.php:1016
msgid "Fill in category ID, multiple IDs are divided by a comma \",\""
msgstr ""
#: options.php:1015
msgid "Imgur (https://imgur.com)"
msgstr ""
#: options.php:1016
msgid "SM.MS (https://sm.ms)"
msgstr ""
#: options.php:1017
msgid "Chevereto (https://chevereto.com)"
msgstr ""
#: options.php:1021
msgid "Imgur Client ID"
msgid "Images category"
msgstr ""
#: options.php:1022
msgid "Statistics Interface"
msgstr ""
#: options.php:1027
msgid "WP-Statistics plugin (Professional statistics, can exclude invalid access)"
msgstr ""
#: options.php:1028
msgid "Theme built-in (simple statistics, calculate each page access request)"
msgstr ""
#: options.php:1032
msgid "Statistical data display format"
msgstr ""
#: options.php:1037
msgid "23333 Views (default)"
msgstr ""
#: options.php:1038
msgid "23,333 Views (britain)"
msgstr ""
#: options.php:1039
msgid "23 333 Views (french)"
msgstr ""
#: options.php:1040
msgid "23k Views (chinese)"
msgstr ""
#: options.php:1044
msgid "Gravatar avatar proxy"
msgstr ""
#: options.php:1045
msgid ""
"A front-ed proxy for Gravatar, eg. gravatar.2heng.xin/avatar . Leave it blank if you do not "
"need."
msgstr ""
#: options.php:1051
msgid "Comment image upload API"
msgstr ""
#: options.php:1056
msgid "Imgur (https://imgur.com)"
msgstr ""
#: options.php:1057
msgid "SM.MS (https://sm.ms)"
msgstr ""
#: options.php:1058
msgid "Chevereto (https://chevereto.com)"
msgstr ""
#: options.php:1062
msgid "Imgur Client ID"
msgstr ""
#: options.php:1063
msgid ""
"Register your application <a href=\"https://api.imgur.com/oauth2/addclient\">here</a>, note we "
"only need the Client ID here."
msgstr ""
#: options.php:1028
#: options.php:1069
msgid "SM.MS Secret Token"
msgstr ""
#: options.php:1029
#: options.php:1070
msgid "Register your application <a href=\"https://sm.ms/home/apitoken\">here</a>."
msgstr ""
#: options.php:1035
#: options.php:1076
msgid "Chevereto API v1 key"
msgstr ""
#: options.php:1036
#: options.php:1077
msgid "Get your API key here: "
msgstr ""
#: options.php:1042
#: options.php:1083
msgid "Chevereto URL"
msgstr ""
#: options.php:1043
#: options.php:1084
msgid "Your Chevereto homepage url, no slash in the end, eg. https://your.cherverto.com"
msgstr ""
#: options.php:1049
#: options.php:1090
msgid "Comment images proxy"
msgstr ""
#: options.php:1050
#: options.php:1091
msgid "A front-ed proxy for the uploaded images. Leave it blank if you do not need."
msgstr ""
#: options.php:1056
#: options.php:1097
msgid "Imgur upload proxy"
msgstr ""
#: options.php:1057
#: options.php:1098
msgid ""
"A back-ed proxy to upload images. You may set a self hosted proxy with Nginx, following my <a "
"href=\"https://2heng.xin/2018/06/06/javascript-upload-images-with-imgur-api/\">turtal</a>. "
@ -1521,146 +1592,146 @@ msgid ""
"</a>】"
msgstr ""
#: options.php:1063
#: options.php:1104
msgid "Enable live search"
msgstr ""
#: options.php:1064
#: options.php:1105
msgid ""
"Real-time search in the foreground, call the Rest API to update the cache every hour, you can "
"manually set the cache time in functions.php"
"manually set the cache time in api.php"
msgstr ""
#: options.php:1070
#: options.php:1111
msgid "Include comments in live search"
msgstr ""
#: options.php:1071
#: options.php:1112
msgid ""
"Search for comments in real-time search (not recommended if there are too many comments on the "
"site)"
msgstr ""
#: options.php:1077
#: options.php:1118
msgid "Enable baguetteBox"
msgstr ""
#: options.php:1078
#: options.php:1119
msgid ""
"Default off<a href=\"https://github.com/mashirozx/Sakura/wiki/Fancybox\">please read wiki</a>"
msgstr ""
#: options.php:1084
#: options.php:1125
msgid "Enable lazyload in posts"
msgstr ""
#: options.php:1091
#: options.php:1132
msgid "lazyload spinner"
msgstr ""
#: options.php:1092
#: options.php:1133
msgid "The placeholder to display when the image loads, fill in the image url"
msgstr ""
#: options.php:1098
#: options.php:1139
msgid "Whether to enable the clipboard copyright"
msgstr ""
#: options.php:1099
#: options.php:1140
msgid ""
"Automatically add a copyright to the clipboard when copying more than 30 bytes, which is "
"enabled by default."
msgstr ""
#: options.php:1105
#: options.php:1146
msgid "Email address prefix"
msgstr ""
#: options.php:1106
#: options.php:1147
msgid ""
"For sending system mail, the sender address displayed in the user's mailbox, do not use "
"Chinese, the default system email address is bibi@your_domain_name"
msgstr ""
#: options.php:1112
#: options.php:1153
msgid "Comments reply notification"
msgstr ""
#: options.php:1113
#: options.php:1154
msgid ""
"WordPress will use email to notify users when their comments receive a reply by default. Tick "
"this item allows users to set their own comments reply notification"
msgstr ""
#: options.php:1119
#: options.php:1160
msgid "Administrator comment notification"
msgstr ""
#: options.php:1120
#: options.php:1161
msgid "Whether to use email notification when the administrator's comments receive a reply"
msgstr ""
#: options.php:1126
#: options.php:1167
msgid "Enable private comment"
msgstr ""
#: options.php:1127
#: options.php:1168
msgid "Allow users to set their own comments to be invisible to others"
msgstr ""
#: options.php:1133
#: options.php:1174
msgid "Human verification"
msgstr ""
#: options.php:1134
#: options.php:1175
msgid "Enable human verification"
msgstr ""
#: options.php:1140
#: options.php:1181
msgid "QQ avatar link encryption"
msgstr ""
#: options.php:1141
#: options.php:1182
msgid "Do not display the user's qq avatar links directly."
msgstr ""
#: options.php:1146
#: options.php:1187
msgid "Off (default)"
msgstr ""
#: options.php:1147
#: options.php:1188
msgid "use redirect (general security)"
msgstr ""
#: options.php:1148
#: options.php:1189
msgid "fetch data at backend (high security)"
msgstr ""
#: options.php:1149
#: options.php:1190
msgid "fetch data at backend (high securityslow)"
msgstr ""
#: options.php:1153
#: options.php:1194
msgid "Comment UA infomation"
msgstr ""
#: options.php:1154
#: options.php:1195
msgid "Check to enable, display the user's browser, operating system information"
msgstr ""
#: options.php:1160
#: options.php:1201
msgid "Enable disqus"
msgstr ""
#: options.php:1161
#: options.php:1202
msgid "Enable disqus for comment"
msgstr ""
#: options.php:1167
#: options.php:1208
msgid "Time Zone adjustment"
msgstr ""
#: options.php:1168
#: options.php:1209
msgid ""
"If the comment has a time difference problem adjust here, fill in an integer, the calculation "
"method: actual_time = display_error_time - the_integer_you_entered (unit: hour)"
@ -1714,6 +1785,10 @@ msgstr ""
msgid "Attribution-NonCommercial-ShareAlike 4.0 International"
msgstr ""
#: user/page-bangumi.php:30
msgid "Please fill in the Bilibili UID in Sakura Options."
msgstr ""
#: user/page-login.php:18
msgid "Remember Me"
msgstr ""
@ -1777,6 +1852,10 @@ msgstr ""
msgid "Sign up"
msgstr ""
#: user/page-register.php:92
#: user/page-register.php:90
msgid "Success! Redirecting......"
msgstr ""
#: user/page-register.php:95
msgid "Registration is not open yet."
msgstr ""

Binary file not shown.

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Sakura\n"
"POT-Creation-Date: 2020-02-13 23:59+0800\n"
"PO-Revision-Date: 2020-02-13 23:59+0800\n"
"POT-Creation-Date: 2020-04-06 17:55+0800\n"
"PO-Revision-Date: 2020-04-06 17:56+0800\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: zh_CN\n"
@ -142,36 +142,36 @@ msgstr "小工具"
msgid "Nav Menus"
msgstr "导航菜单"
#: functions.php:420 inc/theme_plus.php:186 layouts/authorprofile.php:11
#: functions.php:423 inc/theme_plus.php:186 layouts/authorprofile.php:11
#: options.php:121
msgid "Author"
msgstr "作者"
#: functions.php:420
#: functions.php:423
msgid "Blogger"
msgstr "博主"
#: functions.php:424
#: functions.php:427
msgid "Location"
msgstr "来自"
#: functions.php:428
#: functions.php:431
msgid "Private"
msgstr "私密"
#: functions.php:430
#: functions.php:433
msgid "Yes"
msgstr "是"
#: functions.php:432
#: functions.php:435
msgid "No"
msgstr "否"
#: functions.php:435
#: functions.php:438
msgid "Edit"
msgstr "编辑"
#: functions.php:524
#: functions.php:527
msgid ""
"Please install pulgin <a href=\"https://wordpress.org/plugins/wp-statistics/"
"\" target=\"_blank\">WP-Statistics</a>"
@ -179,39 +179,39 @@ msgstr ""
"请安装插件 <a href=\"https://wordpress.org/plugins/wp-statistics/\" target="
"\"_blank\">WP-Statistics</a>"
#: functions.php:574
#: functions.php:577
msgid "This guy is so lazy ╮(╯▽╰)╭"
msgstr "这家伙好懒╮(╯▽╰)╭"
#: functions.php:1329
#: functions.php:1334
msgid "All expand/collapse"
msgstr "全部展开/收缩"
#: functions.php:1350 options.php:834
#: functions.php:1355 options.php:834
msgid " "
msgstr ""
#: functions.php:1354
#: functions.php:1359
msgid " post(s)"
msgstr " 篇文章"
#: functions.php:1377 functions.php:1380 inc/theme_plus.php:478
#: functions.php:1382 functions.php:1385 inc/theme_plus.php:478
msgid "Dashboard"
msgstr "管理中心"
#: functions.php:1606
#: functions.php:1611
msgid "<b>ERROR</b>: This email domain (<b>@"
msgstr ""
#: functions.php:1711
#: functions.php:1716
msgid "QQ"
msgstr ""
#: functions.php:1781
#: functions.php:1788
msgid "Sidebar"
msgstr "侧栏"
#: functions.php:1893
#: functions.php:1900
msgid ""
"<b> For a better experience, please do not set <a href=\"/wp-admin/options-"
"permalink.php\"> permalink </a> as plain. To do this, you may need to "
@ -227,10 +227,6 @@ msgstr ""
msgid "page %s "
msgstr "第 %s 页 "
#: inc/api.php:301 inc/theme_plus.php:727
msgid "The comment is private"
msgstr "该评论为私密评论"
#: inc/categories-images.php:45 inc/categories-images.php:66
msgid "category/tag image"
msgstr "分类/标签图像"
@ -252,6 +248,10 @@ msgstr "图像"
msgid "no image"
msgstr "暂无"
#: inc/classes/Cache.php:70 inc/theme_plus.php:727
msgid "The comment is private"
msgstr "该评论为私密评论"
#: inc/options-framework.php:182 inc/options-framework.php:183
#: inc/options-framework.php:412
msgid "Sakura Options"
@ -938,7 +938,7 @@ msgstr "点点"
msgid "Whether to turn on the top-feature"
msgstr "是否开启聚焦"
#: options.php:446 options.php:1085
#: options.php:446 options.php:1126
msgid "Default on"
msgstr "默认开启"
@ -1412,52 +1412,95 @@ msgid "Footer float music player"
msgstr "页脚悬浮播放器"
#: options.php:926
msgid ""
"If you don't need the player just leave it blank.Fill in the \"song list\" "
"ID of Netease Cloud Music, eg: https://music.163.com/#/playlist?"
"id=2288037900 The ID is 2288037900"
msgstr ""
"如果不需要播放器留空即可。填写网易云音乐的「歌单」IDeghttps://music.163."
"com/#/playlist?id=2288037900的ID是2288037900"
msgid "Choose which platform you'll use."
msgstr "选择你要使用的平台。"
#: options.php:931
msgid "Netease Cloud Music (default)"
msgstr "网易云音乐(默认)"
#: options.php:932
msgid "Xiami Music"
msgstr "虾米音乐"
#: options.php:933
msgid "KuGou Music"
msgstr "酷狗音乐"
#: options.php:934
msgid "Baidu Music"
msgstr "百度音乐"
#: options.php:935
msgid "QQ Music (may fail) "
msgstr "QQ音乐可能解析失败 "
#: options.php:936
msgid "Off"
msgstr "关闭"
#: options.php:940
msgid "Song list ID"
msgstr "「歌单」ID"
#: options.php:941
msgid ""
"Fill in the \"song list\" ID, eg: https://music.163.com/#/playlist?"
"id=2288037900 The ID is 2288037900"
msgstr ""
"填写「歌单」IDeghttps://music.163.com/#/playlist?id=2288037900的ID是"
"2288037900"
#: options.php:947
msgid "Netease Cloud Music cookie"
msgstr "网易云音乐 Cookies"
#: options.php:948
msgid ""
"For Netease Cloud Music, fill in your vip account's cookies if you want to "
"play special tracks.<b>If you don't know what does mean, left it blank.</b>"
msgstr ""
"针对网易云音乐如果你想播放特殊曲目填入你的vip帐号Cookies。<b>如果不知道这"
"是什么意思,忽略即可。</b>"
#: options.php:954
msgid "Version Control"
msgstr "版本控制"
#: options.php:933
#: options.php:955
msgid ""
"Used to update frontend cookies and browser caches, any string can be used"
msgstr "用于更新前端 cookie 及浏览器缓存,可使用任意字符串"
#: options.php:939
#: options.php:961
msgid "Enable PJAX (recommand on)"
msgstr "开启PJAX局部刷新建议开启"
#: options.php:940
#: options.php:962
msgid "The principle is the same as Ajax"
msgstr "原理与Ajax相同"
#: options.php:946
#: options.php:968
msgid "Enable NProgress progress bar"
msgstr "开启NProgress加载进度条"
#: options.php:947 options.php:954 options.php:961
#: options.php:969 options.php:976 options.php:983
msgid "Default off, check on"
msgstr "默认不开启,勾选开启"
#: options.php:953
#: options.php:975
msgid "Enable sidebar widget"
msgstr "支持侧栏小部件"
#: options.php:960
#: options.php:982
msgid "Enable Announcement"
msgstr "开启公告"
#: options.php:967
#: options.php:989
msgid "Announcement content"
msgstr "公告内容"
#: options.php:968
#: options.php:990
msgid ""
"Announcement content, the text exceeds 142 bytes will be scrolled display "
"(mobile device is invalid)"
@ -1465,72 +1508,108 @@ msgstr ""
"公告内容文字超出142个字节将会被滚动显示移动端无效一个汉字 = 3字节一"
"个字母 = 1字节自己计算吧"
#: options.php:974
#: options.php:995
msgid "Bilibili UID"
msgstr ""
#: options.php:996
msgid ""
"Fill in your UID, eg.https://space.bilibili.com/13972644/, only fill in with "
"the number part."
msgstr ""
"填写你的UID,例如https://space.bilibili.com/13972644/,只需填写数字部分。"
#: options.php:1002
msgid "Bilibili Cookie"
msgstr ""
#: options.php:1003
msgid ""
"Fill in your Cookies, go to your bilibili homepage, you can get cookies in "
"brownser network pannel with pressing F12. If left this blank, you'll not "
"get the progress."
msgstr ""
"填写你的帐号Cookies。F12打开浏览器网络面板前往你的B站主页获取Cookies。如果"
"留空,将不会显示追番进度。"
#: options.php:1008
msgid "The categories of articles that don't not show on homepage"
msgstr "首页不显示的分类文章"
#: options.php:975 options.php:982
#: options.php:1009 options.php:1016
msgid "Fill in category ID, multiple IDs are divided by a comma \",\""
msgstr "填写分类ID多个用英文“ , ”分开"
#: options.php:981
#: options.php:1015
msgid "Images category"
msgstr "图片展示分类"
#: options.php:988
#: options.php:1022
msgid "Statistics Interface"
msgstr "统计接口"
#: options.php:993
#: options.php:1027
msgid ""
"WP-Statistics plugin (Professional statistics, can exclude invalid access)"
msgstr "WP-Statistics 插件(专业性统计,可排除无效访问)"
#: options.php:994
#: options.php:1028
msgid "Theme built-in (simple statistics, calculate each page access request)"
msgstr "主题内建(简单的统计,计算每一次页面访问请求)"
#: options.php:998
#: options.php:1032
msgid "Statistical data display format"
msgstr "统计数据显示格式"
#: options.php:1003
#: options.php:1037
msgid "23333 Views (default)"
msgstr "23333 次访问(默认)"
#: options.php:1004
#: options.php:1038
msgid "23,333 Views (britain)"
msgstr "23,333 次访问(英式)"
#: options.php:1005
#: options.php:1039
msgid "23 333 Views (french)"
msgstr "23 333 次访问(法式)"
#: options.php:1006
#: options.php:1040
msgid "23k Views (chinese)"
msgstr "23k 次访问(中式)"
#: options.php:1010
#: options.php:1044
msgid "Gravatar avatar proxy"
msgstr "Gravatar头像代理"
#: options.php:1045
msgid ""
"A front-ed proxy for Gravatar, eg. gravatar.2heng.xin/avatar . Leave it "
"blank if you do not need."
msgstr ""
"填写Gravatar头像的代理地址例如gravatar.2heng.xin/avatar。留空则不使用代"
"理。"
#: options.php:1051
msgid "Comment image upload API"
msgstr "评论上传图片接口"
#: options.php:1015
#: options.php:1056
msgid "Imgur (https://imgur.com)"
msgstr ""
#: options.php:1016
#: options.php:1057
msgid "SM.MS (https://sm.ms)"
msgstr ""
#: options.php:1017
#: options.php:1058
msgid "Chevereto (https://chevereto.com)"
msgstr ""
#: options.php:1021
#: options.php:1062
msgid "Imgur Client ID"
msgstr ""
#: options.php:1022
#: options.php:1063
msgid ""
"Register your application <a href=\"https://api.imgur.com/oauth2/addclient"
"\">here</a>, note we only need the Client ID here."
@ -1538,48 +1617,48 @@ msgstr ""
"在<a href=\"https://api.imgur.com/oauth2/addclient\">这里</a>注册你的 "
"application , 注意此处只需要填写 Client ID."
#: options.php:1028
#: options.php:1069
msgid "SM.MS Secret Token"
msgstr ""
#: options.php:1029
#: options.php:1070
msgid ""
"Register your application <a href=\"https://sm.ms/home/apitoken\">here</a>."
msgstr "在<a href=\"https://sm.ms/home/apitoken\">这里</a>获取 key."
#: options.php:1035
#: options.php:1076
msgid "Chevereto API v1 key"
msgstr ""
#: options.php:1036
#: options.php:1077
msgid "Get your API key here: "
msgstr "在这里获取你的 API key "
#: options.php:1042
#: options.php:1083
msgid "Chevereto URL"
msgstr ""
#: options.php:1043
#: options.php:1084
msgid ""
"Your Chevereto homepage url, no slash in the end, eg. https://your.cherverto."
"com"
msgstr ""
"你的 Chevereto 首页 url, 注意结尾没有 /, 例如https://your.cherverto.com"
#: options.php:1049
#: options.php:1090
msgid "Comment images proxy"
msgstr "评论图片代理"
#: options.php:1050
#: options.php:1091
msgid ""
"A front-ed proxy for the uploaded images. Leave it blank if you do not need."
msgstr "前端显示的图片的代理。"
#: options.php:1056
#: options.php:1097
msgid "Imgur upload proxy"
msgstr "Imgur 上传代理"
#: options.php:1057
#: options.php:1098
msgid ""
"A back-ed proxy to upload images. You may set a self hosted proxy with "
"Nginx, following my <a href=\"https://2heng.xin/2018/06/06/javascript-upload-"
@ -1594,33 +1673,33 @@ msgstr ""
"端显示都需要代理!如果服务器在国外不需要上传代理,此处填写默认值即可:【<a "
"href=\"https://api.imgur.com/3/image/\">https://api.imgur.com/3/image/</a>】"
#: options.php:1063
#: options.php:1104
msgid "Enable live search"
msgstr "启用实时搜索"
#: options.php:1064
#: options.php:1105
msgid ""
"Real-time search in the foreground, call the Rest API to update the cache "
"every hour, you can manually set the cache time in functions.php"
"every hour, you can manually set the cache time in api.php"
msgstr ""
"前台实现实时搜索,调用 Rest API 每小时更新一次缓存,可在 functions.php 里手动"
"设置缓存时间"
"前台实现实时搜索,调用 Rest API 每小时更新一次缓存,可在 api.php 里手动设置缓"
"存时间"
#: options.php:1070
#: options.php:1111
msgid "Include comments in live search"
msgstr "实时搜索包含评论"
#: options.php:1071
#: options.php:1112
msgid ""
"Search for comments in real-time search (not recommended if there are too "
"many comments on the site)"
msgstr "在实时搜索中搜索评论(如果网站评论数量太多不建议开启)"
#: options.php:1077
#: options.php:1118
msgid "Enable baguetteBox"
msgstr "启用 baguetteBox"
#: options.php:1078
#: options.php:1119
msgid ""
"Default off<a href=\"https://github.com/mashirozx/Sakura/wiki/Fancybox"
"\">please read wiki</a>"
@ -1628,33 +1707,33 @@ msgstr ""
"默认禁用,<a href=\"https://github.com/mashirozx/Sakura/wiki/Fancybox\">请阅"
"读说明</a>"
#: options.php:1084
#: options.php:1125
msgid "Enable lazyload in posts"
msgstr "文章内图片启用 lazyload"
#: options.php:1091
#: options.php:1132
msgid "lazyload spinner"
msgstr "lazyload 占位图"
#: options.php:1092
#: options.php:1133
msgid "The placeholder to display when the image loads, fill in the image url"
msgstr "图片加载时要显示的占位图,填写图片 url"
#: options.php:1098
#: options.php:1139
msgid "Whether to enable the clipboard copyright"
msgstr "是否开启剪贴板版权标识"
#: options.php:1099
#: options.php:1140
msgid ""
"Automatically add a copyright to the clipboard when copying more than 30 "
"bytes, which is enabled by default."
msgstr "复制超过30个字节时自动向剪贴板添加版权标识默认开启。"
#: options.php:1105
#: options.php:1146
msgid "Email address prefix"
msgstr "发件地址前缀"
#: options.php:1106
#: options.php:1147
msgid ""
"For sending system mail, the sender address displayed in the user's mailbox, "
"do not use Chinese, the default system email address is bibi@your_domain_name"
@ -1662,11 +1741,11 @@ msgstr ""
"用于发送系统邮件,在用户的邮箱中显示的发件人地址,不要使用中文,默认系统邮件"
"地址为 bibi@你的域名"
#: options.php:1112
#: options.php:1153
msgid "Comments reply notification"
msgstr "邮件回复通知"
#: options.php:1113
#: options.php:1154
msgid ""
"WordPress will use email to notify users when their comments receive a reply "
"by default. Tick this item allows users to set their own comments reply "
@ -1675,78 +1754,78 @@ msgstr ""
"WordPress默认会使用邮件通知用户评论收到回复开启此项允许用户设置自己的评论收"
"到回复时是否使用邮件通知"
#: options.php:1119
#: options.php:1160
msgid "Administrator comment notification"
msgstr "邮件回复通知管理员"
#: options.php:1120
#: options.php:1161
msgid ""
"Whether to use email notification when the administrator's comments receive "
"a reply"
msgstr "当管理员评论收到回复时是否使用邮件通知"
#: options.php:1126
#: options.php:1167
msgid "Enable private comment"
msgstr "允许私密评论"
#: options.php:1127
#: options.php:1168
msgid "Allow users to set their own comments to be invisible to others"
msgstr "允许用户设置自己的评论对其他人不可见"
#: options.php:1133
#: options.php:1174
msgid "Human verification"
msgstr "机器人验证"
#: options.php:1134
#: options.php:1175
msgid "Enable human verification"
msgstr "开启机器人验证"
#: options.php:1140
#: options.php:1181
msgid "QQ avatar link encryption"
msgstr "QQ头像链接加密"
#: options.php:1141
#: options.php:1182
msgid "Do not display the user's qq avatar links directly."
msgstr "不直接暴露用户QQ头像链接"
msgstr "不直接暴露用户QQ头像链接"
#: options.php:1146
#: options.php:1187
msgid "Off (default)"
msgstr "关闭(默认)"
#: options.php:1147
#: options.php:1188
msgid "use redirect (general security)"
msgstr "使用重定向(安全性低)"
#: options.php:1148
#: options.php:1189
msgid "fetch data at backend (high security)"
msgstr "后端获取头像数据(安全性高)"
#: options.php:1149
#: options.php:1190
msgid "fetch data at backend (high securityslow)"
msgstr "后端解析QQ头像接口安全性高"
#: options.php:1153
#: options.php:1194
msgid "Comment UA infomation"
msgstr "评论UA信息"
#: options.php:1154
#: options.php:1195
msgid ""
"Check to enable, display the user's browser, operating system information"
msgstr "勾选开启,显示用户的浏览器,操作系统信息"
#: options.php:1160
#: options.php:1201
msgid "Enable disqus"
msgstr "开启多说插件支持"
#: options.php:1161
#: options.php:1202
msgid "Enable disqus for comment"
msgstr "多说已经凉了~~"
#: options.php:1167
#: options.php:1208
msgid "Time Zone adjustment"
msgstr "时区调整"
#: options.php:1168
#: options.php:1209
msgid ""
"If the comment has a time difference problem adjust here, fill in an "
"integer, the calculation method: actual_time = display_error_time - "
@ -1806,6 +1885,10 @@ msgstr ""
msgid "Attribution-NonCommercial-ShareAlike 4.0 International"
msgstr "知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议"
#: user/page-bangumi.php:30
msgid "Please fill in the Bilibili UID in Sakura Options."
msgstr "请在后台设置填写 Bilibili UID 后继续。"
#: user/page-login.php:18
msgid "Remember Me"
msgstr "记住我"
@ -1870,7 +1953,11 @@ msgstr "拖动滑块验证"
msgid "Sign up"
msgstr "注 册"
#: user/page-register.php:92
#: user/page-register.php:90
msgid "Success! Redirecting......"
msgstr "注册成功!正在跳转......"
#: user/page-register.php:95
msgid "Registration is not open yet."
msgstr "暂未开放注册。"

View File

@ -182,7 +182,7 @@ function optionsframework_options()
'name' => __('Favicon', 'sakura'),
'desc' => __('It is the small logo on the browser tab, fill in the url', 'sakura'), /*就是浏览器标签栏上那个小 logo填写url*/
'id' => 'favicon_link',
'std' => '/wp-content/themes/Sakura/images/favicon.ico',
'std' => get_template_directory_uri().'/images/favicon.ico',
'type' => 'text');
$options[] = array(
@ -923,11 +923,33 @@ function optionsframework_options()
$options[] = array(
'name' => __('Footer float music player', 'sakura'), /*页脚悬浮播放器*/
'desc' => __('If you don\'t need the player just leave it blank.Fill in the "song list" ID of Netease Cloud Music, eg: https://music.163.com/#/playlist?id=2288037900 The ID is 2288037900', 'sakura'), /*如果不需要播放器留空即可。填写网易云音乐的「歌单」IDeghttps://music.163.com/#/playlist?id=2288037900的ID是2288037900*/
'id' => 'playlist_id',
'desc' => __('Choose which platform you\'ll use.', 'sakura'),
'id' => 'aplayer_server',
'std' => "netease",
'type' => "select",
'options' => array(
'netease' => __('Netease Cloud Music (default)', 'sakura'),
'xiami' => __('Xiami Music', 'sakura'),
'kugou' => __('KuGou Music', 'sakura'),
'baidu' => __('Baidu Music', 'sakura'),
'tencent' => __('QQ Music (may fail) ', 'sakura'),
'off' => __('Off', 'sakura'),
));
$options[] = array(
'name' => __('Song list ID', 'sakura'),
'desc' => __('Fill in the "song list" ID, eg: https://music.163.com/#/playlist?id=2288037900 The ID is 2288037900', 'sakura'),
'id' => 'aplayer_playlistid',
'std' => '2288037900',
'type' => 'text');
$options[] = array(
'name' => __('Netease Cloud Music cookie', 'sakura'),
'desc' => __('For Netease Cloud Music, fill in your vip account\'s cookies if you want to play special tracks.<b>If you don\'t know what does mean, left it blank.</b>', 'sakura'),
'id' => 'aplayer_cookie',
'std' => '',
'type' => 'textarea');
$options[] = array(
'name' => __('Version Control', 'sakura'), /*版本控制*/
'desc' => __('Used to update frontend cookies and browser caches, any string can be used', 'sakura'), /*用于更新前端 cookie 及浏览器缓存,可使用任意字符串*/
@ -969,7 +991,19 @@ function optionsframework_options()
'id' => 'notice_title',
'std' => '',
'type' => 'text');
$options[] = array(
'name' => __('Bilibili UID', 'sakura'), /*bilibiliUID*/
'desc' => __('Fill in your UID, eg.https://space.bilibili.com/13972644/, only fill in with the number part.', 'sakura'),
'id' => 'bilibili_id',
'std' => '13972644',
'type' => 'text');
$options[] = array(
'name' => __('Bilibili Cookie', 'sakura'), /*Bilibili Cookie*/
'desc' => __('Fill in your Cookies, go to your bilibili homepage, you can get cookies in brownser network pannel with pressing F12. If left this blank, you\'ll not get the progress.', 'sakura'),
'id' => 'bilibili_cookie',
'std' => 'LIVE_BUVID=',
'type' => 'textarea');
$options[] = array(
'name' => __('The categories of articles that don\'t not show on homepage', 'sakura'), /*首页不显示的分类文章*/
'desc' => __('Fill in category ID, multiple IDs are divided by a comma ","', 'sakura'), /*填写分类ID多个用英文“ , ”分开*/
@ -1006,6 +1040,13 @@ function optionsframework_options()
'type_4' => __('23k Views (chinese)', 'sakura'), /*23k 次访问(中式)*/
));
$options[] = array(
'name' => __('Gravatar avatar proxy', 'sakura'),
'desc' => __('A front-ed proxy for Gravatar, eg. gravatar.2heng.xin/avatar . Leave it blank if you do not need.', 'sakura'),
'id' => 'gravatar_proxy',
'std' => "gravatar.2heng.xin/avatar",
'type' => "text");
$options[] = array(
'name' => __('Comment image upload API', 'sakura'), /*评论图片上传接口*/
'id' => 'img_upload_api',
@ -1061,7 +1102,7 @@ function optionsframework_options()
$options[] = array(
'name' => __('Enable live search', 'sakura'), /*启用实时搜索*/
'desc' => __('Real-time search in the foreground, call the Rest API to update the cache every hour, you can manually set the cache time in functions.php', 'sakura'), /*前台实现实时搜索,调用 Rest API 每小时更新一次缓存,可在 functions.php 里手动设置缓存时间*/
'desc' => __('Real-time search in the foreground, call the Rest API to update the cache every hour, you can manually set the cache time in api.php', 'sakura'), /*前台实现实时搜索,调用 Rest API 每小时更新一次缓存,可在 functions.php 里手动设置缓存时间*/
'id' => 'live_search',
'std' => '0',
'type' => 'checkbox');

255
style.css
View File

@ -5,7 +5,7 @@ Theme URI: https://github.com/mashirozx/Sakura/
Author: Mashiro, Spirit, Louie, Fuzzz
Author URI: http://2heng.xin
Description: A wonderful branch of theme Akina
Version: 3.3.7
Version: 3.3.8
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sakura
@ -1283,7 +1283,7 @@ a:hover {
padding: 0 10px;
margin-left: auto;
margin-right: auto;
background-color: rgba(255, 255, 255, .8)
background-color: #fff
}
.post-list {
@ -1325,7 +1325,8 @@ a:hover {
border-radius: 50%;
padding: 2px;
border: 1px solid #DADADA;
position: relative
position: relative;
object-fit: cover
}
.feature :hover .overlay i {
@ -1708,6 +1709,10 @@ i.iconfont.hotpost {
background: #FBFBFB
}
body.dark .s-content{
background: unset;
}
.s-time i {
font-size: 13px;
margin-right: 5px
@ -1876,21 +1881,10 @@ h1.page-title.mb- {
text-align: center
}
@media screen and (max-width:860px) {
.cd-top {
display: none;
height: 60px;
width: 50px
}
.cd-top span {
height: 10px;
width: 50px
}
}
#moblieGoTop {
#moblieGoTop,#moblieDarkLight {
visibility: hidden;
position: fixed;
bottom: 10px;
bottom: 60px;
right: 10px;
z-index: 99;
border: 0;
@ -1905,11 +1899,29 @@ h1.page-title.mb- {
transform: scale(0);
transition:transform .3s
}
#moblieGoTop:hover {
#moblieGoTop:hover,#moblieDarkLight:hover {
background-color: #fff;
opacity: .8
}
#moblieDarkLight{
bottom: 10px;
}
@media screen and (max-width:860px) {
.cd-top {
display: none;
height: 60px;
width: 50px
}
.cd-top span {
height: 10px;
width: 50px
}
#moblieGoTop,#moblieDarkLight{
visibility: visible;
}
}
.post-footer {
padding: 20px 0;
border-bottom: 1px dashed #ddd;
@ -3866,6 +3878,10 @@ li.feature-2 {
z-index: -1
}
@supports (-webkit-touch-callout: none) {
#centerbg: { background-attachment: scroll !important; }
}
@media (max-width:860px) {
#centerbg {
height: 300px;
@ -4364,7 +4380,9 @@ i.iconfont.js-toggle-search.iconsearch {
margin-top: -3px;
line-height: unset;
}
body.dark .ins-section .fa{
color: #ccc;
}
.ins-section .ins-section-header,.ins-section .ins-search-item {
padding: 8px 15px;
cursor: url(https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/cursor/ayuda.cur),auto;
@ -5009,7 +5027,7 @@ i.iconfont.down {
color: #ADADAD
}
#pagination span {
#pagination span,#bangumi-pagination span {
color: #989898;
font-size: 15px
}
@ -5019,7 +5037,7 @@ i.iconfont.down {
color: orange
}
#pagination .loading {
#pagination .loading,#bangumi-pagination .loading {
background: url(https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/wordpress-rotating-ball-o.svg);
background-position: center;
background-repeat: no-repeat;
@ -5217,7 +5235,7 @@ i.iconfont.down {
@media (max-width:860px) {
#main-container {
transition-duration: .5s;
transition: background,transform .5s !important;
position: relative;
overflow: hidden;
z-index: 2
@ -5304,7 +5322,7 @@ i.iconfont.down {
top: 8px
}
.openNav.open .icon {
background-color: transparent
background-color: transparent !important
}
.openNav.open .icon:after,
.openNav.open .icon:before {
@ -5810,7 +5828,8 @@ i.iconfont.down {
}
.header-user-avatar:hover .header-user-menu {
display: block
display: block;
background: #fff;
}
.header-user-menu {
@ -5841,7 +5860,6 @@ i.iconfont.down {
.herder-user-name {
font-size: 12px;
background: #fff;
padding: 10px 10px;
border-radius: 4px 4px 0 0
}
@ -5857,7 +5875,6 @@ i.iconfont.down {
.header-user-menu .user-menu-option {
padding: 5px 0;
background: #fff;
border-radius: 0 0 4px 4px;
width: 130px
}
@ -5877,6 +5894,11 @@ i.iconfont.down {
background-color: #f1f1f1
}
body.dark .user-menu-option a:hover {
color: #3daee9;
background-color: #232629
}
.no-logged {
font-size: 13px;
padding: 15px 10px;
@ -5886,7 +5908,7 @@ i.iconfont.down {
.no-logged a {
display: initial;
color: #69d2e7;
color: #69d2e7 !important;
font-size: 14px;
padding: 0 5px;
text-decoration: underline
@ -8277,6 +8299,8 @@ td.hljs-ln-numbers {
--widthB: calc(var(--widthA) - 30px);
height: var(--widthB);
min-height: 99%;
white-space: pre-wrap;
word-wrap: break-word;
overflow-y: hidden;
overflow-x: auto;
height: auto
@ -8624,3 +8648,180 @@ h1[id*=toc-head]::before,h2[id*=toc-head]::before,h3[id*=toc-head]::before,h4[id
width: 100%;
height: 100%;
}
.bangumi {
margin-top: 40px;
}
.bangumi .row {
display: flex;
margin: 0 -10px -20px;
flex-wrap: wrap;
}
.bangumi .column {
max-width: 50%;
flex: 0 0 50%;
margin-bottom: 30px;
padding: 0 15px;
max-width: 100%;
flex: 0 0 100%;
transition: .5s;
}
.bangumi-item {
height: 0;
color: #fff;
display: block;
overflow: hidden;
text-align: center;
position: relative;
padding-bottom: 130%;
box-shadow: 0 0 10px rgba(0, 0, 0, .1), 0 5px 20px rgba(0, 0, 0, .2);
}
.bangumi-item:hover {
color: #fff;
}
.bangumi-item img {
width: 100%;
user-select: none;
object-fit: cover;
transition: filter 2s;
}
.bangumi-item .bangumi-info {
height: 30%;
top: 0;
left: 0;
right: 0;
padding: 10px;
position: absolute;
background: rgba(0, 0, 0, .5);
transition: transform 1s;
transform: translateY(250%);
}
.bangumi-title {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-top: 0;
}
.bangumi-summary {
height: 65%;
white-space: normal;
display: none;
font-weight: bold;
}
.bangumi-status-bar {
top: 0;
bottom: 0;
max-width: 100%;
position: absolute;
background: #dc143c;
}
.bangumi-status, .bangumi-status p {
position: relative;
}
.bangumi-status {
background: rgba(0, 0, 0, .6);
}
@media screen and (min-width: 400px) {
.bangumi .column {
max-width: 50%;
flex: 0 0 50%;
}
.bangumi-item .bangumi-info{
height: 50%;
transform: translateY(140%);
}
.bangumi-title {
height: 20%;
}
}
@media screen and (min-width: 600px) {
.bangumi .column {
max-width: 33.3333%;
flex: 0 0 33.3333%;
}
.bangumi-title {
height: 30%;
}
.bangumi-item .bangumi-info{
height: 45%;
transform: translateY(140%);
}
}
@media screen and (min-width: 900px) {
.bangumi .column {
max-width: 25%;
flex: 0 0 25%;
}
.bangumi-item .bangumi-info{
height: 100%;
transform: translateY(85%);
}
.bangumi-item:hover .bangumi-info {
transform: translateY(0);
}
.bangumi-item:hover img{
filter: blur(3px);
}
body.dark .bangumi-item:hover img{
filter: brightness(0.8) blur(3px);
}
.bangumi-title {
height: 15%;
}
.bangumi-summary{
display: block;
}
.bangumi-status {
height: 10%;
}
}
@media screen and (min-width: 1200px) {
.bangumi-item .bangumi-info{
height: 75%;
transform: translateY(115%);
}
.bangumi-item:hover .bangumi-info {
transform: translateY(35%);
}
.bangumi-title {
height: 10%;
}
}
#bangumi-pagination {
width: 100%;
margin-top: 80px;
padding: 20px 0;
font-size: 36px;
text-align: center;
}
.bangumi-next{
font-family: sans-serif;
color: #e67474;
position: relative;
padding: 13px 35px;
overflow: hidden;
}
.bangumi-next:before {
content: ' ';
background-color: pink;
bottom: 0;
left: 0;
width: 100%;
height: 0;
position: absolute;
transition: all 5s;
z-index: -1;
}
.bangumi-next.loading:before{
display: none !important;
}
.bangumi-next:hover:before {
height: 100%;
}
.bangumi-next i {
color: orange;
}

38
user/page-bangumi.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/**
Template Name: Bangumi
*/
get_header();
?>
<meta name="referrer" content="same-origin">
<style>
#content,.comments,.site-footer{max-width:1200px;}
.comments{display: none}
</style>
</head>
<?php while(have_posts()) : the_post(); ?>
<?php if(akina_option('patternimg') || !get_post_thumbnail_id(get_the_ID())) { ?>
<span class="linkss-title"><?php the_title();?></span>
<?php } ?>
<article <?php post_class("post-item"); ?>>
<?php the_content(); ?>
<section class="bangumi">
<?php if (akina_option('bilibili_id') ):?>
<div class="row">
<?php
$bgm = new \Sakura\API\Bilibili();
echo $bgm->get_bgm_items();
?>
<?php else: ?>
<div class="row">
<p> <?php _e("Please fill in the Bilibili UID in Sakura Options.","sakura"); ?></p>
</div>
<?php endif; ?>
</section>
</article>
<?php endwhile; ?>
<?php
get_footer();

View File

@ -86,7 +86,10 @@ if( !empty($_POST['register_reg']) ) {
<?php }else{
$loadurl = akina_option('exlogin_url') ? akina_option('exlogin_url') : get_bloginfo('url');
?>
<script>//window.location.href='<?php echo $loadurl; ?>';</script>
<div class="ex-register-title">
<h3><?php _e("Success! Redirecting......","sakura")/*注册成功!正在跳转...*/?></h3>
</div>
<script>window.location.href='<?php echo $loadurl; ?>';</script>
<?php } ?>
<?php else : ?>
<div class="register-close"><p><?php _e("Registration is not open yet.","sakura")/*暂未开放注册。*/?></p></div>