From 8e9e36e1b8dcda5173918a27848fa3bfd657c125 Mon Sep 17 00:00:00 2001 From: Sora39831 <540587985@qq.com> Date: Wed, 8 Apr 2026 15:34:50 +0800 Subject: [PATCH] Fix turnstile tab re-render and bump version --- config/version | 2 +- web/html/login.html | 32 +++++++++++++++++++++++++++----- web/login_template_test.go | 4 ++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/config/version b/config/version index 05822b7e..96aee38d 100644 --- a/config/version +++ b/config/version @@ -1 +1 @@ -2.8.11 \ No newline at end of file +v1.3.4-beta diff --git a/web/html/login.html b/web/html/login.html index 71ec6625..44b76e9b 100644 --- a/web/html/login.html +++ b/web/html/login.html @@ -178,7 +178,7 @@ this.animationStarted = true; this.initHeadline(); } - if (this.turnstileSiteKey) { + if (this.turnstileSiteKey && this.activeTab === 'register') { this.ensureTurnstileRendered(); } }); @@ -191,11 +191,22 @@ }, methods: { switchTab(key) { + if (key !== 'register') { + this.destroyTurnstile(); + } this.activeTab = key; if (key === 'register') { this.$nextTick(() => this.ensureTurnstileRendered()); } }, + destroyTurnstile() { + turnstileToken = ''; + turnstileContainer = null; + if (window.turnstile && turnstileWidgetId !== null) { + turnstile.remove(turnstileWidgetId); + } + turnstileWidgetId = null; + }, async doLogin() { this.loadingStates.spinning = true; const msg = await HttpUtil.post('/login', this.user); @@ -224,13 +235,18 @@ this.activeTab = 'login'; this.user.username = this.regUser.username; this.regUser = { username: "", password: "", confirmPassword: "" }; - turnstileToken = ''; - if (window.turnstile && turnstileWidgetId !== null) { - turnstile.reset(turnstileWidgetId); - } + this.destroyTurnstile(); } this.loadingStates.registerSpinning = false; }, + isTurnstileContainerVisible(container) { + var pane = container.closest('.ant-tabs-tabpane'); + if (!pane) { + return true; + } + var paneStyle = window.getComputedStyle(pane); + return paneStyle.display !== 'none' && paneStyle.visibility !== 'hidden'; + }, ensureTurnstileRendered(retries = 20) { if (!this.turnstileSiteKey) { return; @@ -242,6 +258,12 @@ } return; } + if (!this.isTurnstileContainerVisible(container)) { + if (retries > 0) { + setTimeout(() => this.ensureTurnstileRendered(retries - 1), 150); + } + return; + } if ( turnstileWidgetId !== null && (turnstileContainer !== container || container.childElementCount === 0) diff --git a/web/login_template_test.go b/web/login_template_test.go index 93a064e4..6fa3cfcb 100644 --- a/web/login_template_test.go +++ b/web/login_template_test.go @@ -18,6 +18,10 @@ func TestLoginTemplateRebuildsTurnstileAfterTabSwitch(t *testing.T) { "turnstile.remove(turnstileWidgetId);", "turnstileContainer !== container", "turnstileToken = '';", + "this.activeTab === 'register'", + "!this.isTurnstileContainerVisible(container)", + "if (key !== 'register') {", + "this.destroyTurnstile();", } for _, check := range checks {