fix(ui): 提交防重复覆盖验证码路径、waline 按页加载、懒加载、safe-area、硬编码文案接字典
1) 防重复点击原来漏了最主要的一条路径
footer 的全局 submit 监听会禁用按钮,但**程序化 form.submit() 不触发 submit 事件** ——
走 reCAPTCHA / Turnstile 的流程是在回调里调 form.submit() 的,而默认配置
captcha_type = recaptcha,也就是主提问流一直没有防重复。登录、注册、找回密码、
投票、注销账号同样走这个回调。
→ 把「切提交中状态」抽成 tbBeginSubmit(form, trigger) 挂到 window,
验证码回调先调它再 submit。7 个 data-callback="onSubmit" 的模板全部受益。
顺带加了 data-tb-restore 的重复覆盖保护,避免 bfcache 复位后按钮卡在转圈。
2) waline.js / waline.css 从全站改按页加载
只有 home.html 与 item.html 用评论区,但此前挂在 header 里 —— 登录、后台、投票、
私聊每页都下载解析 waline.js(2.15 未压缩约 200KB)。实测 /login 已无引用。
3) 图片懒加载:explore 列表头像与题目配图加 loading="lazy"(首屏推荐位不加,避免影响 LCP)。
4) 移动端底栏:body 只预留固定 56px,而底栏 padding 含 safe-area-inset-bottom。
带 Home Indicator 的 iPhone 上 inset 约 34px、底栏实际约 88px,最后约 32px
(页脚备案、存活计时)被压在栏下,滚到底也看不到。改成 calc(56px + env(...))。
5) 硬编码中文接字典(en/ja 用户此前直接看到中文):
history-template 的「查看回答 / 加载更多 / 加载中... / 无更多留言」、
单题页「@xxx 以前回答过的问题」(字典里本来就有 ask.history)、
投票页「(最多 N 项)」改为带参数的整句(原先前半走字典、后半手写中文)。
新增 4 个 key × 4 语言。
实测:箱主语言设为 en 后箱主页显示 View answer ×2 / Load more / No more posts,中文零残留。
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<div data-qid="{{$elem.ID}}">
|
||||
<hr>
|
||||
<a class="uk-button uk-button-default uk-button-small uk-float-right"
|
||||
href="/_/{{$.PageUser.Domain}}/{{$elem.ID}}">查看回答</a>
|
||||
href="/_/{{$.PageUser.Domain}}/{{$elem.ID}}">{{t $.LangCode "qlist.viewAnswer"}}</a>
|
||||
<div class="uk-text-left uk-text-small uk-text-muted">
|
||||
{{if $elem.IsPinned}}<span class="tb-pin-flag" title="{{t $.LangCode "ask.pinned"}}">⭐</span>{{end}}
|
||||
{{Date $elem.CreatedAt "Y-m-d H:i:s"}}
|
||||
@@ -58,7 +58,7 @@
|
||||
<div>
|
||||
<hr>
|
||||
<a class='uk-button uk-button-default uk-button-small uk-float-right'
|
||||
href='/_/{{.PageUser.Domain}}/${question.id}'>查看回答</a>
|
||||
href='/_/{{.PageUser.Domain}}/${question.id}'>{{t .LangCode "qlist.viewAnswer"}}</a>
|
||||
<div class='uk-text-left uk-text-small uk-text-muted'>
|
||||
${question.is_pinned ? '<span class=\'tb-pin-flag\' title=\'{{$pinTitle}}\'>⭐</span>' : ''}
|
||||
${dayjs(question.created_at).format('YYYY-MM-DD HH:mm:ss')}
|
||||
@@ -72,12 +72,12 @@
|
||||
// 网络失败/响应非法 JSON 时复位 loading,避免按钮永远停留在加载中状态
|
||||
.catch(() => { loading = false })
|
||||
}" class="uk-button uk-button-default uk-width-1-1 uk-margin-small-bottom">
|
||||
<span x-show="!loading">加载更多</span>
|
||||
<span x-show="loading"><div uk-spinner="ratio: 0.8"></div> 加载中...</span>
|
||||
<span x-show="!loading">{{t .LangCode "qlist.loadMore"}}</span>
|
||||
<span x-show="loading"><div uk-spinner="ratio: 0.8"></div> {{t .LangCode "qlist.loading"}}</span>
|
||||
</button>
|
||||
<div x-show="!more" class="uk-text-meta uk-text-center">
|
||||
<hr>
|
||||
无更多留言
|
||||
{{t .LangCode "qlist.noMore"}}
|
||||
<br><br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
{{ range $index, $elem := .AskUploadImages }}
|
||||
<div uk-lightbox>
|
||||
<a href="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}">
|
||||
<img class="uk-border-rounded uk-object-fill" src="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}" width="100" height="100" alt="">
|
||||
<img class="uk-border-rounded uk-object-fill" src="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}" width="100" height="100" alt="" loading="lazy">
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -96,7 +96,7 @@
|
||||
{{ range $index, $elem := .AnswerUploadImages }}
|
||||
<div uk-lightbox>
|
||||
<a href="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}">
|
||||
<img class="uk-border-rounded uk-object-fill" src="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}" width="100" height="100" alt="">
|
||||
<img class="uk-border-rounded uk-object-fill" src="https://{{ ImageBucketCDNHost }}/{{ $elem.Key }}" width="100" height="100" alt="" loading="lazy">
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -147,6 +147,9 @@
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ if not .CanDelete }}
|
||||
<!-- 评论区资源只在本页加载(此前挂在 header 里,等于每页都下载) -->
|
||||
<link rel="stylesheet" href="https://r2.337845818.best/tamabox/cdn/waline/client/v2/waline-no-commits.css" media="print" onload="this.media='all'"/>
|
||||
<script defer src="https://cdnjs.snrat.com/ajax/libs/waline/2.15.8/waline.js"></script>
|
||||
<div id="waline"></div>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
@@ -98,7 +98,7 @@ document.getElementById("introcolor").style.color = {{.PageUser.Introcolor}};
|
||||
|
||||
<hr class="uk-divider-icon">
|
||||
{{ if ne (len .PageQuestions) 0 }}
|
||||
<p class="uk-text-left uk-text-muted uk-text-small">@{{ .PageUser.Name }} 以前回答过的问题 ({{ .AnsweredCount }})</p>
|
||||
<p class="uk-text-left uk-text-muted uk-text-small">{{t .LangCode "ask.history" .PageUser.Name}} ({{ .AnsweredCount }})</p>
|
||||
{{ template "question/history-template" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user