From bc96f530601ecfa91ab0306c97e2aa4deb67963a Mon Sep 17 00:00:00 2001
From: NekoCH <96158157+ex-hentai@users.noreply.github.com>
Date: Wed, 17 Sep 2025 17:42:17 +0800
Subject: [PATCH 1/2] use details summary for spoiler
---
include/functions.php | 8 ++++----
public/js/nexus.js | 9 ---------
public/styles/nexus.css | 12 +++++-------
3 files changed, 9 insertions(+), 20 deletions(-)
diff --git a/include/functions.php b/include/functions.php
index d11edfcf..b2229321 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -290,13 +290,13 @@ function formatSpoiler($content, $title = '', $defaultCollapsed = true): string
$title = $lang_functions['spoiler_default_title'];
}
// $content = str_replace(['
', '
'], '', $content);
- $contentClass = "spoiler-content";
+ $contentClass = "";
if ($defaultCollapsed) {
- $contentClass .= " collapse";
+ $contentClass .= " open";
}
$HTML = sprintf(
- '
',
- $lang_functions['spoiler_expand_collapse'], $title, $contentClass, $content
+ '%s
%s ',
+ $contentClass, $title, $content
);
return addTempCode($HTML);
}
diff --git a/public/js/nexus.js b/public/js/nexus.js
index 453bd826..c4ea6628 100644
--- a/public/js/nexus.js
+++ b/public/js/nexus.js
@@ -1,13 +1,4 @@
jQuery(document).ready(function () {
- jQuery('.spoiler-title').on('click', function () {
- let content = jQuery(this).parent().next();
- if (content.hasClass('collapse')) {
- content.height(content[0].scrollHeight).removeClass('collapse')
- } else {
- content.height(0).addClass('collapse')
- }
- })
-
function getImgPosition(e, imgEle) {
// console.log(e, imgEle)
let imgWidth = imgEle.prop('naturalWidth')
diff --git a/public/styles/nexus.css b/public/styles/nexus.css
index f5590989..854dad8a 100644
--- a/public/styles/nexus.css
+++ b/public/styles/nexus.css
@@ -4,20 +4,18 @@ img.hitandrun {
background: url(icons.gif) no-repeat -100px -171px;
margin-left: 0.5em;
}
-.spoiler-title {
+details summary {
+ width: fit-content;
line-height: 28px;
color: #4d6c99;
cursor: pointer;
font-weight: 700;
background-color: rgba(77, 108, 153, 0.1);
- display: inline-block;
padding: 0 10px;
+ transition: margin .15s ease-out;
}
-.spoiler-content {
- display: inline-block;
- height: 0;
- overflow: hidden;
- transition: height 0.3s ease;
+details[open] summary {
+ margin-bottom: 10px;
}
.layui-layer {
color: black;
From 3363d1585ed01eb6cc41c91b86d13b0e7e933a11 Mon Sep 17 00:00:00 2001
From: Koala Ng
Date: Wed, 17 Sep 2025 18:05:33 +0800
Subject: [PATCH 2/2] Update BdInfoExtra.php
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. 兼容BDInfo 0.8.0.1 Beta
2. 删除冗余代码
---
nexus/Torrent/BdInfoExtra.php | 179 ++++++++--------------------------
1 file changed, 42 insertions(+), 137 deletions(-)
diff --git a/nexus/Torrent/BdInfoExtra.php b/nexus/Torrent/BdInfoExtra.php
index 13ddad9e..2f1e45f2 100644
--- a/nexus/Torrent/BdInfoExtra.php
+++ b/nexus/Torrent/BdInfoExtra.php
@@ -44,11 +44,11 @@ class BdInfoExtra
{
foreach ($lines as $line) {
$line = $this->trim($line);
- if (strpos($line, 'DISC INFO:') !== false ||
- strpos($line, 'PLAYLIST REPORT:') !== false ||
- strpos($line, 'VIDEO:') !== false ||
- strpos($line, 'AUDIO:') !== false ||
- strpos($line, 'SUBTITLES:') !== false) {
+ if (strpos($line, 'DISC INFO') !== false ||
+ strpos($line, 'PLAYLIST REPORT') !== false ||
+ strpos($line, 'VIDEO') !== false ||
+ strpos($line, 'AUDIO') !== false ||
+ strpos($line, 'SUBTITLES') !== false) {
return false;
}
}
@@ -73,7 +73,7 @@ class BdInfoExtra
}
// 检测新的DISC
- if (strpos($line, 'DISC INFO:') !== false) {
+ if (strpos($line, 'DISC INFO') !== false) {
// 保存之前的DISC(如果存在)
if ($currentDisc !== null) {
$discs[] = $currentDisc;
@@ -91,19 +91,19 @@ class BdInfoExtra
$audioIndex = 0;
$subtitleIndex = 0;
continue;
- } elseif (strpos($line, 'PLAYLIST REPORT:') !== false) {
+ } elseif (strpos($line, 'PLAYLIST REPORT') !== false) {
$currentSection = 'playlist_report';
continue;
- } elseif (strpos($line, 'VIDEO:') !== false) {
+ } elseif (strpos($line, 'VIDEO') !== false) {
$currentSection = 'video';
continue;
- } elseif (strpos($line, 'AUDIO:') !== false) {
+ } elseif (strpos($line, 'AUDIO') !== false) {
$currentSection = 'audio';
continue;
- } elseif (strpos($line, 'SUBTITLES:') !== false) {
+ } elseif (strpos($line, 'SUBTITLES') !== false) {
$currentSection = 'subtitles';
continue;
- } elseif (strpos($line, 'CHAPTERS:') !== false || strpos($line, 'STREAM DIAGNOSTICS:') !== false) {
+ } elseif (strpos($line, 'CHAPTERS') !== false || strpos($line, 'STREAM DIAGNOSTICS') !== false) {
$currentSection = '';
continue;
}
@@ -292,7 +292,7 @@ class BdInfoExtra
}
// 解析视频行 - 包括隐藏视频流(带*号的)
- if (preg_match('/^(\*?\s*)(.+?)\s+(\d+)\s+kbps\s+(.+)$/', $line, $matches)) {
+ if (preg_match('/^(\*?\s*)(.+?)\s+([\d,]+)\s+kbps\s+(.+)$/', $line, $matches)) {
$isHidden = strpos($matches[1], '*') !== false;
if (!$isHidden) {
@@ -327,36 +327,23 @@ class BdInfoExtra
}
/**
- * 提取括号内容(全角括号和半角括号)
+ * 提取非英文内容
*/
- private function extractChineseBrackets(string $text): array
+ private function extractNonEnglishContent(string $text): array
{
- $result = ['text' => $text, 'chinese_brackets' => []];
+ $result = ['text' => $text, 'non_english_content' => []];
- // 匹配全角括号内容(提取非英文内容)
- if (preg_match_all('/(([^)]+))/u', $text, $matches)) {
- foreach ($matches[1] as $match) {
- // 检查是否包含非英文字符
- if (preg_match('/[^\x{0000}-\x{007F}]/u', $match)) {
- $result['chinese_brackets'][] = $match;
+ // 提取所有非英文字符的内容
+ if (preg_match_all('/[^\x{0000}-\x{007F}]+/u', $text, $matches)) {
+ foreach ($matches[0] as $match) {
+ $match = trim($match);
+ if (!empty($match)) {
+ $result['non_english_content'][] = $match;
}
}
- // 从原文本中移除包含非英文的全角括号内容
- $result['text'] = preg_replace('/([^)]*[^\x{0000}-\x{007F}][^)]*)/u', '', $text);
- }
-
- // 匹配半角括号内容(提取非英文内容)
- if (preg_match_all('/\(([^)]+)\)/', $text, $matches)) {
- foreach ($matches[1] as $match) {
- // 检查是否包含非英文字符
- if (preg_match('/[^\x{0000}-\x{007F}]/u', $match)) {
- $result['chinese_brackets'][] = $match;
- }
- }
-
- // 从原文本中移除包含非英文的半角括号内容
- $result['text'] = preg_replace('/\([^)]*[^\x{0000}-\x{007F}][^)]*\)/u', '', $result['text']);
+ // 从原文本中移除非英文字符内容
+ $result['text'] = preg_replace('/[^\x{0000}-\x{007F}]+/u', '', $text);
}
$result['text'] = trim($result['text']);
@@ -375,12 +362,12 @@ class BdInfoExtra
// 解析音频行 - 格式:DTS-HD Master Audio English 1564 kbps 2.0 / 48 kHz / 1564 kbps / 24-bit
// 也包含隐藏音频流(带*号的)
- if (preg_match('/^(\*?\s*)(.+?)\s+([A-Za-z]+)\s+(\d+)\s+kbps\s+(.+)$/', $line, $matches)) {
+ if (preg_match('/^(\*?\s*)(.+?)\s+([A-Za-z]+)\s+([\d,]+)\s+kbps\s+(.+)$/', $line, $matches)) {
$description = trim($matches[5]);
// 提取括号内容
- $extracted = $this->extractChineseBrackets($description);
- $chineseBrackets = $extracted['chinese_brackets'];
+ $extracted = $this->extractNonEnglishContent($description);
+ $nonEnglishContent = $extracted['non_english_content'];
$cleanDescription = $extracted['text'];
$audio[$audioIndex] = [
@@ -388,7 +375,7 @@ class BdInfoExtra
'language' => trim($matches[3]),
'bitrate' => trim($matches[4]) . ' kbps',
'description' => $cleanDescription,
- 'chinese_brackets' => $chineseBrackets
+ 'non_english_content' => $nonEnglishContent
];
$audioIndex++;
}
@@ -425,8 +412,8 @@ class BdInfoExtra
// 只有当语言不为空时才添加
if (!empty($language)) {
// 提取括号内容
- $extracted = $this->extractChineseBrackets($description);
- $chineseBrackets = $extracted['chinese_brackets'];
+ $extracted = $this->extractNonEnglishContent($description);
+ $nonEnglishContent = $extracted['non_english_content'];
$cleanDescription = $extracted['text'];
$subtitles[$subtitleIndex] = [
@@ -434,7 +421,7 @@ class BdInfoExtra
'language' => $language,
'bitrate' => $bitrate,
'description' => $cleanDescription,
- 'chinese_brackets' => $chineseBrackets
+ 'non_english_content' => $nonEnglishContent
];
$subtitleIndex++;
}
@@ -684,9 +671,9 @@ class BdInfoExtra
}
// 括号内容(添加到最后面)
- if (!empty($audio['chinese_brackets'])) {
- foreach ($audio['chinese_brackets'] as $chineseBracket) {
- $audioInfo[] = $chineseBracket;
+ if (!empty($audio['non_english_content'])) {
+ foreach ($audio['non_english_content'] as $nonEnglishItem) {
+ $audioInfo[] = $nonEnglishItem;
}
}
@@ -710,9 +697,9 @@ class BdInfoExtra
$subtitleInfo = [$subtitle['language']];
// 括号内容(添加到最后面)
- if (!empty($subtitle['chinese_brackets'])) {
- foreach ($subtitle['chinese_brackets'] as $chineseBracket) {
- $subtitleInfo[] = $chineseBracket;
+ if (!empty($subtitle['non_english_content'])) {
+ foreach ($subtitle['non_english_content'] as $nonEnglishItem) {
+ $subtitleInfo[] = $nonEnglishItem;
}
}
@@ -723,88 +710,6 @@ class BdInfoExtra
return $result;
}
- /**
- * 生成extra格式的输出
- */
- public function generateExtraFormat(): string
- {
- $output = [];
-
- // 时长
- $duration = $this->getDuration();
- if (!empty($duration)) {
- $output[] = 'Runtime: ' . $duration;
- }
-
- // 分辨率
- $resolution = $this->getResolution();
- if (!empty($resolution)) {
- $output[] = 'Resolution: ' . $resolution;
- }
-
- // 码率
- $bitrate = $this->getTotalBitrate();
- if (!empty($bitrate)) {
- $output[] = 'Bitrate: ' . $bitrate;
- }
-
- // HDR格式
- $hdrFormat = $this->getHDRFormat();
- if (!empty($hdrFormat)) {
- $output[] = 'HDR: ' . $hdrFormat;
- }
-
- // 位深度
- $bitDepth = $this->getBitDepth();
- if (!empty($bitDepth)) {
- $output[] = 'Bit depth: ' . $bitDepth;
- }
-
- // 帧率
- $frameRate = $this->getFrameRate();
- if (!empty($frameRate)) {
- $output[] = 'Frame rate: ' . $frameRate;
- }
-
- // 配置文件
- $profile = $this->getProfile();
- if (!empty($profile)) {
- $output[] = 'Profile: ' . $profile;
- }
-
- // 视频格式
- $videoFormat = $this->getVideoFormat();
- if (!empty($videoFormat)) {
- $output[] = 'Format: ' . $videoFormat;
- }
-
- // Extras信息
- $extras = $this->getExtras();
- if (!empty($extras)) {
- $output[] = 'Extras: ' . $extras;
- }
-
- // 音频
- $audios = $this->getAudios();
- if (!empty($audios)) {
- $output[] = 'Audio:';
- foreach ($audios as $key => $audio) {
- $output[] = $key . ': ' . $audio;
- }
- }
-
- // 字幕
- $subtitles = $this->getSubtitles();
- if (!empty($subtitles)) {
- $output[] = '';
- $output[] = 'Subtitles:';
- foreach ($subtitles as $key => $subtitle) {
- $output[] = $key . ': ' . $subtitle;
- }
- }
-
- return implode("\n", $output);
- }
/**
* 获取所有DISC的数据
@@ -825,7 +730,7 @@ class BdInfoExtra
}
// 检测新的DISC
- if (strpos($line, 'DISC INFO:') !== false) {
+ if (strpos($line, 'DISC INFO') !== false) {
// 保存之前的DISC(如果存在)
if ($currentDisc !== null) {
$discs[] = $currentDisc;
@@ -843,19 +748,19 @@ class BdInfoExtra
$audioIndex = 0;
$subtitleIndex = 0;
continue;
- } elseif (strpos($line, 'PLAYLIST REPORT:') !== false) {
+ } elseif (strpos($line, 'PLAYLIST REPORT') !== false) {
$currentSection = 'playlist_report';
continue;
- } elseif (strpos($line, 'VIDEO:') !== false) {
+ } elseif (strpos($line, 'VIDEO') !== false) {
$currentSection = 'video';
continue;
- } elseif (strpos($line, 'AUDIO:') !== false) {
+ } elseif (strpos($line, 'AUDIO') !== false) {
$currentSection = 'audio';
continue;
- } elseif (strpos($line, 'SUBTITLES:') !== false) {
+ } elseif (strpos($line, 'SUBTITLES') !== false) {
$currentSection = 'subtitles';
continue;
- } elseif (strpos($line, 'CHAPTERS:') !== false || strpos($line, 'STREAM DIAGNOSTICS:') !== false) {
+ } elseif (strpos($line, 'CHAPTERS') !== false || strpos($line, 'STREAM DIAGNOSTICS') !== false) {
$currentSection = '';
continue;
}