diff --git a/web/assets/style.css b/web/assets/style.css index 3f7345b..fc70975 100644 --- a/web/assets/style.css +++ b/web/assets/style.css @@ -227,3 +227,5 @@ code{font-family:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,"Co .rel-asset{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;font-family:ui-monospace,monospace;color:var(--text);text-decoration:none} .rel-asset:hover{border-color:#fff;color:#fff} .rel-size{color:var(--dim);margin-left:6px} +.rel-asset.local{color:#fff;border-color:#fff} +.rel-asset.local::before{content:"·";margin-right:4px} diff --git a/web/downloads/pmm b/web/downloads/pmm new file mode 100644 index 0000000..87b572c Binary files /dev/null and b/web/downloads/pmm differ diff --git a/web/git.php b/web/git.php index 891fec2..2d4f18e 100644 --- a/web/git.php +++ b/web/git.php @@ -71,6 +71,16 @@ function gh_api(string $url): array { $d = json_decode((string)$json, true); return is_array($d) ? $d : []; } +/* Prefer a local copy of a release asset on this server; fall back to GitHub. */ +function local_asset(string $name): ?string { + foreach ([__DIR__ . '/downloads/' . $name, __DIR__ . '/mirror/packages/pmm/' . $name] as $p) { + if (@is_file($p)) { + $base = realpath(__DIR__); + return '/' . str_replace('\\', '/', substr(str_replace('\\', '/', realpath($p)), strlen($base) + 1)); + } + } + return null; +} function render_releases(): void { $rels = gh_api('https://api.github.com/repos/JGZYES/ParlzPackageManger/releases?per_page=30'); if (!$rels) { echo '
无法获取 Releases(网络或 API 受限)。
'; return; } @@ -97,7 +107,8 @@ function render_releases(): void {
- + +