{{define "update_toast"}} {{if .UpdateNotice}}
发现新版本 v{{.UpdateNotice.Version}}

{{.UpdateNotice.Notes}}

去更新 →
{{end}} {{end}} {{define "trial_float"}} {{if .TrialBar}} {{end}} {{end}} {{define "semver_rules"}}
版本号怎么定三段数字
{{end}} {{define "seo_head"}} {{/* 收录底座:描述 / 规范链接 / 收录策略 / 分享卡片 / 结构化数据 / 站长验证 全部由核心引擎按页面级 SEO 元数据生成(ViewData.SEO → ViewData.SEOHead), 此处只负责输出,不再由模板猜内容,详情页也不会退化成站点级描述。 */}} {{.SEOHead}} {{end}} {{define "pagination"}} {{if or .Data.Prev .Data.Next}} {{end}} {{end}} {{define "site_header"}} {{end}} {{define "follow_button"}} {{/* 关注按钮:传入 dict "VD" . "Type" "section" "Key" "3" "Title" "版块名" "URL" "/forum" "Self" "被关注者用户名(人)或空" */}} {{$vd := .VD}}{{$u := $vd.User}} {{if not (and $u (eq $u.Username .Self))}}
{{if followed $u .Type .Key}} {{else}} {{end}}
{{end}} {{end}} {{define "fav_button"}} {{/* 收藏按钮:传入 dict "VD" . "Type" "post" "Key" slug "Title" 标题 "URL" "/post/xxx" */}} {{$vd := .VD}}{{$u := $vd.User}}
{{if faved $u .Type .Key}} {{else}} {{end}}
{{end}} {{define "module_meta"}} {{if .Data.App}}
{{.Data.App.Name}} {{verTag .Data.App.Version}} 作者:{{.Data.App.Author}} {{if and .CSRF .Data.App.Installed .Data.App.Backend}}进入后台管理 →{{end}} 查看完整更新日志 →
{{if .Data.App.Changelog}}
{{range .Data.App.Changelog}}
{{verTag .Version}} {{.Date}} {{range .Items}}{{.}}·{{end}}
{{end}}
{{end}}
{{end}} {{end}} {{define "post_type_blocks"}} {{/* 帖子多类型渲染:按 .Type 输出投票 / 多图 / 商品 / 视频 / 辩论区块。 传入:dict "Type" . "Config" cfg "Poll" pollView "Debate" debateView "PollURL" voteURL "DebateURL" debateURL "VideoLayout" layout */}} {{$cfg := .Config}} {{if eq .Type "poll"}}

{{ico "check"}} 匿名投票 · 实时结果{{if $cfg.Multiple}} · 可多选{{end}}

{{if .Poll}} {{range $i, $o := .Poll.Options}} {{end}} {{else}} {{range $i, $o := $cfg.Options}} {{end}} {{end}}
{{if .Poll}}共 {{.Poll.Total}} 票{{else}}等待第一票{{end}} {{if and .Poll .Poll.Voted}} {{ico "check"}} 你已投票{{if gt .Poll.Mine -1}},选的是第 {{add .Poll.Mine 1}} 项{{end}} {{else}} {{end}}
{{else if eq .Type "gallery"}}
{{range $cfg.Images}}{{end}}
{{else if eq .Type "product"}}
{{if and $cfg.Image $cfg.Title}}
{{$cfg.Title}}
{{$cfg.PlatName}}

{{$cfg.Title}}

{{if $cfg.Desc}}

{{$cfg.Desc}}

{{end}}
{{if $cfg.Price}}{{$cfg.Price}}{{end}} 去看看 →
{{else if or $cfg.Title $cfg.Image}}
{{if $cfg.Image}}{{$cfg.Title}}{{end}}
{{$cfg.PlatName}} {{if $cfg.Title}}

{{$cfg.Title}}

{{end}}
{{if $cfg.Price}}{{$cfg.Price}}{{end}} 去看看 →
{{else}}
{{$cfg.URL}} 打开链接 →
{{end}}
{{else if eq .Type "video"}}
{{if $cfg.Extracted}} {{else}}
{{ico "right"}}
{{$cfg.PlatName}}
该平台暂不支持站内播放,点开去看原视频
去 {{$cfg.PlatName}} 看 →
{{end}}
{{else if eq .Type "debate"}}
正方 {{with $cfg.Pro}}

{{.Title}}

{{if .Statement}}{{strictMD .Statement}}{{end}}{{end}}
{{ico "check"}} {{if .Debate}}{{.Debate.Pro}}{{else}}0{{end}} 人站这边
反方 {{with $cfg.Con}}

{{.Title}}

{{if .Statement}}{{strictMD .Statement}}{{end}}{{end}}
{{ico "close"}} {{if .Debate}}{{.Debate.Con}}{{else}}0{{end}} 人站这边
{{end}} {{end}} {{define "echo_replies"}} {{/* 论坛回声列表 + 发表表单;参数:dict "Replies" . "Thread" th "CurrentUser" user */}}

回声({{len .Replies}}) {{if gt .Thread.DeepReplies 0}}其中 {{.Thread.DeepReplies}} 条是深度回声(≥ 40 字){{end}}

{{range .Replies}}
{{printf "%.1s" .Author}} {{.Author}} {{dateTime .CreatedAt}}
{{strictMD .Content}}
{{if $.CurrentUser}}{{end}} {{range .Replies}}
{{printf "%.1s" .Author}} {{.Author}} {{dateTime .CreatedAt}}
{{strictMD .Content}}
{{if $.CurrentUser}}{{end}}
{{end}}
{{else}}

还没有回声

做第一个接话的人吧——认真写满 40 个字,还能帮楼主把回声指数顶上去。

{{end}} {{if .CurrentUser}}
{{if $.CSRF}}{{end}}
{{ico "spark"}} 回帖满 40 字会被算作「深度回声」,让这场讨论的指数涨得更快;聊深一点,收获更大。
{{captchaField}}
{{else}}
登录后才能参与回声,用你的真实身份接话。 去登录
{{end}}
{{end}} {{define "cache_fab"}} {{/* 悬浮刷新钮(Win本地版专属):刷新 + 清空缓存,但不动登录状态。 会话放在 HttpOnly Cookie 里,这里一个 cookie 都不碰,所以清完还是登录着。 前台与后台用的是同一个片段,样式各自接一套。 */}} {{if .Site.Local}} {{end}} {{end}} {{define "site_footer"}} {{template "cache_fab" .}} {{end}}