修复友圈bug
This commit is contained in:
1 parent
b1a9fd5e74
commit
3f43909fe7
5 files changed
+312
-246
No files matched your search
@@ -0,0 +1,100 @@
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
将 themes/Ying/data/links.yaml 转换为 Friend-Circle-Lite 所需的 JSON 格式。
|
||||
|
||||
.DESCRIPTION
|
||||
读取 Hugo 数据文件 links.yaml,提取 name, url, image 字段,
|
||||
并生成 themes/Ying/static/json/link_lite.json 文件。
|
||||
生成的格式为:
|
||||
{
|
||||
"friends": [
|
||||
["Name", "URL", "AvatarURL"],
|
||||
...
|
||||
]
|
||||
}
|
||||
|
||||
.EXAMPLE
|
||||
.\scripts\update_link_lite_json.ps1
|
||||
#>
|
||||
|
||||
$yamlPath = Join-Path $PSScriptRoot "..\themes\Ying\data\links.yaml"
|
||||
$jsonPath = Join-Path $PSScriptRoot "..\themes\Ying\static\json\link_lite.json"
|
||||
|
||||
Write-Host "Reading $yamlPath..."
|
||||
|
||||
if (-not (Test-Path $yamlPath)) {
|
||||
Write-Error "File not found: $yamlPath"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$content = Get-Content $yamlPath -Encoding UTF8
|
||||
$friends = @()
|
||||
$currentFriend = $null
|
||||
|
||||
foreach ($line in $content) {
|
||||
# Match start of a new list item: " - name: Value"
|
||||
if ($line -match "^\s*-\s*name:\s*(.+)") {
|
||||
# Save previous friend if exists
|
||||
if ($currentFriend) {
|
||||
# Only add if we have at least name and url
|
||||
if ($currentFriend.name -and $currentFriend.url) {
|
||||
$friends += ,$currentFriend
|
||||
}
|
||||
}
|
||||
|
||||
# Start new friend
|
||||
$currentFriend = [ordered]@{
|
||||
name = $matches[1].Trim()
|
||||
url = ""
|
||||
image = ""
|
||||
}
|
||||
}
|
||||
# Match properties
|
||||
elseif ($currentFriend -ne $null) {
|
||||
if ($line -match "^\s*url:\s*(.+)") {
|
||||
$currentFriend.url = $matches[1].Trim()
|
||||
}
|
||||
elseif ($line -match "^\s*image:\s*(.+)") {
|
||||
$currentFriend.image = $matches[1].Trim()
|
||||
}
|
||||
elseif ($line -match "^\s*avatar:\s*(.+)") {
|
||||
# Handle 'avatar' key just in case
|
||||
$currentFriend.image = $matches[1].Trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
# Add the last one
|
||||
if ($currentFriend -and $currentFriend.name -and $currentFriend.url) {
|
||||
$friends += ,$currentFriend
|
||||
}
|
||||
|
||||
Write-Host "Found $($friends.Count) friends."
|
||||
|
||||
# Convert to requested format: ["name", "url", "image"]
|
||||
$outputList = @()
|
||||
foreach ($f in $friends) {
|
||||
# Use image if available, otherwise empty string or default
|
||||
$img = if ($f.image) { $f.image } else { "" }
|
||||
$outputList += ,@($f.name, $f.url, $img)
|
||||
}
|
||||
|
||||
$outputData = @{
|
||||
friends = $outputList
|
||||
}
|
||||
|
||||
# Convert to JSON
|
||||
# -Depth 10 ensures nested arrays are expanded
|
||||
# -EscapeHandling Default ensures unicode is preserved/handled correctly (PowerShell 7)
|
||||
$json = $outputData | ConvertTo-Json -Depth 10
|
||||
|
||||
# Ensure directory exists
|
||||
$jsonDir = Split-Path $jsonPath
|
||||
if (-not (Test-Path $jsonDir)) {
|
||||
New-Item -ItemType Directory -Path $jsonDir | Out-Null
|
||||
}
|
||||
|
||||
# Write to file
|
||||
[System.IO.File]::WriteAllText($jsonPath, $json, [System.Text.Encoding]::UTF8)
|
||||
|
||||
Write-Host "Successfully generated $jsonPath" -ForegroundColor Green
|
||||
Reference in new issue
Block a user