From e7a5b6e548e4c665cfed77940ca1a0ea5fe02788 Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Fri, 20 Feb 2026 15:35:05 +0100 Subject: [PATCH 1/2] IS-11032 Change submit button to have spinners and disabled behavior on submit --- .../attribute-prompt/index.vm | 7 +- .../auto-link-account/index.vm | 15 +-- .../opt-in-mfa/manage.vm | 19 ++-- .../opt-in-mfa/recovery-code.vm | 5 +- .../opt-in-mfa/recovery-codes-reset.vm | 7 +- .../opt-in-mfa/register-confirm.vm | 5 +- .../opt-in-mfa/select-to-manage.vm | 5 +- .../opt-in-mfa/select.vm | 9 +- .../opt-in-mfa/setup-confirm.vm | 9 +- .../authentication-action/opt-in-mfa/setup.vm | 9 +- .../request-acknowledgement/index.vm | 11 ++- .../require-active-account/get.vm | 21 ++-- .../reset-password/index.vm | 5 +- .../core/authentication-action/signup/get.vm | 3 +- .../core/authenticator/bankid/launch/index.vm | 9 +- .../core/authenticator/bankid/wait/index.vm | 5 +- .../authenticator/duo/enter-username/index.vm | 7 +- .../duo/register/register-device.vm | 5 +- .../authenticator/email/enter-otp/index.vm | 3 +- .../email/enter-username/index.vm | 5 +- .../html-form/account-activation/otp.vm | 11 ++- .../request-new-activation.vm | 3 +- .../account-activation/set-password.vm | 5 +- .../html-form/authenticate/get.vm | 7 +- .../html-form/create-account/get.vm | 5 +- .../html-form/create-account/post.vm | 5 +- .../html-form/forgot-account-id/get.vm | 5 +- .../html-form/reset-password/get.vm | 3 +- .../html-form/set-password/get.vm | 3 +- .../passkeys/authenticate-device/get.vm | 13 +-- .../authenticator/passkeys/register/get.vm | 9 +- .../pingfederate/authenticate/index.vm | 5 +- .../core/authenticator/sms/confirm/index.vm | 5 +- .../core/authenticator/sms/enter-otp/get.vm | 5 +- .../authenticator/sms/enter-username/get.vm | 5 +- .../core/authenticator/sms/register/index.vm | 5 +- .../totp/authenticate/enter-totp.vm | 5 +- .../authenticator/totp/authenticate/index.vm | 5 +- .../core/authenticator/totp/register/index.vm | 5 +- .../authenticator/totp/set-alias/index.vm | 5 +- .../webauthn/authenticate-device/get.vm | 9 +- .../authenticator/webauthn/register/get.vm | 17 ++-- .../core/fragments/button-loading.vm | 97 +++++++++++++++++++ .../templates/core/fragments/set-alias.vm | 5 +- .../core/views/oauth/confirm-usercode.vm | 3 +- .../templates/core/views/oauth/consent.vm | 5 +- .../core/views/oauth/enter-usercode.vm | 3 +- 47 files changed, 291 insertions(+), 126 deletions(-) create mode 100644 src/identity-server/templates/core/fragments/button-loading.vm diff --git a/src/identity-server/templates/core/authentication-action/attribute-prompt/index.vm b/src/identity-server/templates/core/authentication-action/attribute-prompt/index.vm index 468d4a37..13e2dcb8 100644 --- a/src/identity-server/templates/core/authentication-action/attribute-prompt/index.vm +++ b/src/identity-server/templates/core/authentication-action/attribute-prompt/index.vm @@ -62,8 +62,8 @@ #end - + #if($!_allowSkip == true) #parse("fragments/jquery") @@ -87,6 +87,9 @@ #end + +#parse("fragments/button-loading") + #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/auto-link-account/index.vm b/src/identity-server/templates/core/authentication-action/auto-link-account/index.vm index 3f4fb72d..a29274a7 100644 --- a/src/identity-server/templates/core/authentication-action/auto-link-account/index.vm +++ b/src/identity-server/templates/core/authentication-action/auto-link-account/index.vm @@ -20,7 +20,7 @@

#message("authentication-action.auto-link-account.view.info")

- + - +

#message("authentication-action.auto-link-account.view.text")

+ class="button button-loading button-fullwidth button-primary $!button_color mt2" + value="true">#message("authentication-action.auto-link-account.view.allow")
+ class="button button-loading button-fullwidth button-primary-outline $!button_color mt2" + value="false">#message("authentication-action.auto-link-account.view.deny")
+ +#parse("fragments/button-loading") + #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/manage.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/manage.vm index cc6ae377..8761e156 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/manage.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/manage.vm @@ -32,14 +32,16 @@
-
@@ -59,14 +61,16 @@
-
@@ -80,7 +84,7 @@
- +
#end @@ -88,20 +92,21 @@ #if($_canCompleteAuthentication)
-
#else
-
#end
+#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-code.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-code.vm index 794ddc19..d06fc7b0 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-code.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-code.vm @@ -28,14 +28,15 @@ - +
- +
+#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-codes-reset.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-codes-reset.vm index 07feb222..019dfc1c 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-codes-reset.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/recovery-codes-reset.vm @@ -24,7 +24,7 @@

#message("${_templatePrefix}.recovery-codes-reset.view.title")

#message("${_templatePrefix}.recovery-codes-reset.view.sub-title")

- +
    #foreach($_recoveryCode in $_recoveryCodes) @@ -46,18 +46,19 @@ #if($_recoveryCodesBatchId) #end - +
- +
+#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/register-confirm.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/register-confirm.vm index 7126a283..d73b4a1c 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/register-confirm.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/register-confirm.vm @@ -31,18 +31,19 @@
- +
- +
+#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/select-to-manage.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/select-to-manage.vm index 96635b95..c75dee4a 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/select-to-manage.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/select-to-manage.vm @@ -29,14 +29,16 @@
-
@@ -53,6 +55,7 @@ #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/select.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/select.vm index bad217a3..49e45923 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/select.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/select.vm @@ -36,14 +36,16 @@
-
@@ -74,14 +76,16 @@
-
@@ -121,6 +125,7 @@ })() +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup-confirm.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup-confirm.vm index b394e2b0..26357c10 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup-confirm.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup-confirm.vm @@ -49,13 +49,13 @@ #end - +
- +
@@ -68,9 +68,8 @@ window.print(); }) } - }) + }) - -#end +#parse("fragments/button-loading")#end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup.vm b/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup.vm index 5369b4ca..c5992b45 100644 --- a/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup.vm +++ b/src/identity-server/templates/core/authentication-action/opt-in-mfa/setup.vm @@ -27,14 +27,16 @@
-
@@ -45,13 +47,14 @@
-

#message("${_templatePrefix}.setup.view.opt-out.description")

#end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/request-acknowledgement/index.vm b/src/identity-server/templates/core/authentication-action/request-acknowledgement/index.vm index 18607365..58194046 100644 --- a/src/identity-server/templates/core/authentication-action/request-acknowledgement/index.vm +++ b/src/identity-server/templates/core/authentication-action/request-acknowledgement/index.vm @@ -25,20 +25,23 @@
+ class="button button-loading button-fullwidth button-primary $!button_color mt2" + value="true">#message($_acceptButtonLabel)
#if($_cancellable == true)
+ class="button button-loading button-fullwidth button-primary-outline $!button_color mt2" + value="false">#message($_cancelButtonLabel)
#end
+ +#parse("fragments/button-loading") + #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/require-active-account/get.vm b/src/identity-server/templates/core/authentication-action/require-active-account/get.vm index 3fac8a4f..e34fea7d 100644 --- a/src/identity-server/templates/core/authentication-action/require-active-account/get.vm +++ b/src/identity-server/templates/core/authentication-action/require-active-account/get.vm @@ -31,29 +31,32 @@ - - #elseif ($_activationForm == "email")
#message("${_templatePrefix}.view.error.user-cancelled")
- #end #end #else - #end + +#parse("fragments/button-loading") + #end -#parse("layouts/default") \ No newline at end of file +#parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/reset-password/index.vm b/src/identity-server/templates/core/authentication-action/reset-password/index.vm index bfb29353..5de1af9b 100644 --- a/src/identity-server/templates/core/authentication-action/reset-password/index.vm +++ b/src/identity-server/templates/core/authentication-action/reset-password/index.vm @@ -72,7 +72,7 @@ - + #if($!_allowSkip == true) #parse("fragments/jquery") @@ -96,6 +96,9 @@ #end + +#parse("fragments/button-loading") + #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authentication-action/signup/get.vm b/src/identity-server/templates/core/authentication-action/signup/get.vm index aa1ebbe3..165ce858 100644 --- a/src/identity-server/templates/core/authentication-action/signup/get.vm +++ b/src/identity-server/templates/core/authentication-action/signup/get.vm @@ -138,6 +138,7 @@ #end +#parse("fragments/button-loading") #end -#parse("layouts/default") \ No newline at end of file +#parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/bankid/launch/index.vm b/src/identity-server/templates/core/authenticator/bankid/launch/index.vm index 556fbee4..2ea42147 100644 --- a/src/identity-server/templates/core/authenticator/bankid/launch/index.vm +++ b/src/identity-server/templates/core/authenticator/bankid/launch/index.vm @@ -98,8 +98,8 @@ #message("${_templatePrefix}.view.button.this-device") #else
@@ -112,8 +112,8 @@ #message("${_templatePrefix}.view.button.manualstart") #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/duo/enter-username/index.vm b/src/identity-server/templates/core/authenticator/duo/enter-username/index.vm index 5aac5680..4c74b293 100644 --- a/src/identity-server/templates/core/authenticator/duo/enter-username/index.vm +++ b/src/identity-server/templates/core/authenticator/duo/enter-username/index.vm @@ -42,8 +42,9 @@ value="$!_username" autocapitalize="none">
- + +#parse("fragments/button-loading") #end -#parse("layouts/default") \ No newline at end of file +#parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/duo/register/register-device.vm b/src/identity-server/templates/core/authenticator/duo/register/register-device.vm index b40526ea..048528bc 100644 --- a/src/identity-server/templates/core/authenticator/duo/register/register-device.vm +++ b/src/identity-server/templates/core/authenticator/duo/register/register-device.vm @@ -47,9 +47,10 @@ class="block full-width mb1 field-light" autofocus> - +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/email/enter-otp/index.vm b/src/identity-server/templates/core/authenticator/email/enter-otp/index.vm index 98dc805f..fb42b39c 100644 --- a/src/identity-server/templates/core/authenticator/email/enter-otp/index.vm +++ b/src/identity-server/templates/core/authenticator/email/enter-otp/index.vm @@ -54,7 +54,7 @@
- +
#end @@ -66,6 +66,7 @@ +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/email/enter-username/index.vm b/src/identity-server/templates/core/authenticator/email/enter-username/index.vm index 1652573d..a8ccdea8 100644 --- a/src/identity-server/templates/core/authenticator/email/enter-username/index.vm +++ b/src/identity-server/templates/core/authenticator/email/enter-username/index.vm @@ -56,10 +56,11 @@ - + #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/account-activation/otp.vm b/src/identity-server/templates/core/authenticator/html-form/account-activation/otp.vm index 3bd2a0fb..1a6632fa 100644 --- a/src/identity-server/templates/core/authenticator/html-form/account-activation/otp.vm +++ b/src/identity-server/templates/core/authenticator/html-form/account-activation/otp.vm @@ -26,17 +26,18 @@ #set($otpInputLength = 6) #parse("fragments/otp-input") -
+#parse("fragments/button-loading") #end -#parse("layouts/default") \ No newline at end of file +#parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/account-activation/request-new-activation.vm b/src/identity-server/templates/core/authenticator/html-form/account-activation/request-new-activation.vm index 4e747e60..06e637c8 100644 --- a/src/identity-server/templates/core/authenticator/html-form/account-activation/request-new-activation.vm +++ b/src/identity-server/templates/core/authenticator/html-form/account-activation/request-new-activation.vm @@ -51,9 +51,10 @@ - + +#parse("fragments/button-loading") #end #* diff --git a/src/identity-server/templates/core/authenticator/html-form/account-activation/set-password.vm b/src/identity-server/templates/core/authenticator/html-form/account-activation/set-password.vm index d7587b08..aa8558c1 100644 --- a/src/identity-server/templates/core/authenticator/html-form/account-activation/set-password.vm +++ b/src/identity-server/templates/core/authenticator/html-form/account-activation/set-password.vm @@ -61,12 +61,13 @@
- +
+#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/authenticate/get.vm b/src/identity-server/templates/core/authenticator/html-form/authenticate/get.vm index d9fd055c..792d967d 100644 --- a/src/identity-server/templates/core/authenticator/html-form/authenticate/get.vm +++ b/src/identity-server/templates/core/authenticator/html-form/authenticate/get.vm @@ -90,8 +90,8 @@ - + #parse("fragments/remember-me")
+ +#parse("fragments/button-loading") + #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/create-account/get.vm b/src/identity-server/templates/core/authenticator/html-form/create-account/get.vm index b214e168..edb03a34 100644 --- a/src/identity-server/templates/core/authenticator/html-form/create-account/get.vm +++ b/src/identity-server/templates/core/authenticator/html-form/create-account/get.vm @@ -117,13 +117,14 @@
- +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/create-account/post.vm b/src/identity-server/templates/core/authenticator/html-form/create-account/post.vm index 92608dde..abddae02 100644 --- a/src/identity-server/templates/core/authenticator/html-form/create-account/post.vm +++ b/src/identity-server/templates/core/authenticator/html-form/create-account/post.vm @@ -56,8 +56,8 @@ #if($_resendAction)
-
#end @@ -70,6 +70,7 @@ +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/html-form/forgot-account-id/get.vm b/src/identity-server/templates/core/authenticator/html-form/forgot-account-id/get.vm index 9de7d75b..04fd5ae7 100644 --- a/src/identity-server/templates/core/authenticator/html-form/forgot-account-id/get.vm +++ b/src/identity-server/templates/core/authenticator/html-form/forgot-account-id/get.vm @@ -55,8 +55,8 @@ - +
@@ -66,6 +66,7 @@ +#parse("fragments/button-loading") #end #* diff --git a/src/identity-server/templates/core/authenticator/html-form/reset-password/get.vm b/src/identity-server/templates/core/authenticator/html-form/reset-password/get.vm index d43e09f9..c85be294 100644 --- a/src/identity-server/templates/core/authenticator/html-form/reset-password/get.vm +++ b/src/identity-server/templates/core/authenticator/html-form/reset-password/get.vm @@ -74,7 +74,7 @@ #end
- +

#message("authenticator.html-form.reset-password.view.or")

+#parse("fragments/button-loading") #end #* diff --git a/src/identity-server/templates/core/authenticator/html-form/set-password/get.vm b/src/identity-server/templates/core/authenticator/html-form/set-password/get.vm index 028c8b5d..d91fa6ee 100644 --- a/src/identity-server/templates/core/authenticator/html-form/set-password/get.vm +++ b/src/identity-server/templates/core/authenticator/html-form/set-password/get.vm @@ -57,7 +57,7 @@ #end - +
#message("authenticator.html-form.set-password.view.cancel") @@ -71,6 +71,7 @@ #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/passkeys/authenticate-device/get.vm b/src/identity-server/templates/core/authenticator/passkeys/authenticate-device/get.vm index 432a9a42..2f39fe5b 100644 --- a/src/identity-server/templates/core/authenticator/passkeys/authenticate-device/get.vm +++ b/src/identity-server/templates/core/authenticator/passkeys/authenticate-device/get.vm @@ -64,8 +64,8 @@
- #end ## ($_promptForUsername) @@ -73,8 +73,8 @@ @@ -106,6 +106,7 @@ #parse("authenticator/passkeys/js/authenticate-device") +#parse("fragments/button-loading") #end ## /body #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/passkeys/register/get.vm b/src/identity-server/templates/core/authenticator/passkeys/register/get.vm index e3b26cf4..0983d6c1 100644 --- a/src/identity-server/templates/core/authenticator/passkeys/register/get.vm +++ b/src/identity-server/templates/core/authenticator/passkeys/register/get.vm @@ -26,13 +26,13 @@ #parse("authenticator/passkeys/fragments/alerts") @@ -46,6 +46,7 @@ #parse("authenticator/passkeys/js/register") #end +#parse("fragments/button-loading") #end ## /body #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/pingfederate/authenticate/index.vm b/src/identity-server/templates/core/authenticator/pingfederate/authenticate/index.vm index f64af9ee..fb9e164d 100644 --- a/src/identity-server/templates/core/authenticator/pingfederate/authenticate/index.vm +++ b/src/identity-server/templates/core/authenticator/pingfederate/authenticate/index.vm @@ -48,8 +48,8 @@

#message("authenticator.pingfederate.authenticate.view.description")

- @@ -70,6 +70,7 @@ } +#parse("fragments/button-loading") #end #* diff --git a/src/identity-server/templates/core/authenticator/sms/confirm/index.vm b/src/identity-server/templates/core/authenticator/sms/confirm/index.vm index ece4fdf5..5d152259 100644 --- a/src/identity-server/templates/core/authenticator/sms/confirm/index.vm +++ b/src/identity-server/templates/core/authenticator/sms/confirm/index.vm @@ -47,8 +47,8 @@ #parse("fragments/otp-input") #end @@ -60,6 +60,7 @@ +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/sms/enter-otp/get.vm b/src/identity-server/templates/core/authenticator/sms/enter-otp/get.vm index b5edd14c..b7d37d7c 100644 --- a/src/identity-server/templates/core/authenticator/sms/enter-otp/get.vm +++ b/src/identity-server/templates/core/authenticator/sms/enter-otp/get.vm @@ -61,8 +61,8 @@ #parse("fragments/otp-input") #end @@ -104,6 +104,7 @@ +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/sms/enter-username/get.vm b/src/identity-server/templates/core/authenticator/sms/enter-username/get.vm index 35b31f71..c3e94b80 100644 --- a/src/identity-server/templates/core/authenticator/sms/enter-username/get.vm +++ b/src/identity-server/templates/core/authenticator/sms/enter-username/get.vm @@ -63,8 +63,8 @@ - + #end @@ -85,6 +85,7 @@ #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/sms/register/index.vm b/src/identity-server/templates/core/authenticator/sms/register/index.vm index c57e9a93..e12638e2 100644 --- a/src/identity-server/templates/core/authenticator/sms/register/index.vm +++ b/src/identity-server/templates/core/authenticator/sms/register/index.vm @@ -57,8 +57,8 @@ -
@@ -71,6 +71,7 @@ +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/totp/authenticate/enter-totp.vm b/src/identity-server/templates/core/authenticator/totp/authenticate/enter-totp.vm index 1b675065..68d22930 100644 --- a/src/identity-server/templates/core/authenticator/totp/authenticate/enter-totp.vm +++ b/src/identity-server/templates/core/authenticator/totp/authenticate/enter-totp.vm @@ -45,8 +45,8 @@ #parse("fragments/otp-input") ## This can be enabled seperatly in each of the authenticators that use this template. Some may @@ -64,6 +64,7 @@ #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/totp/authenticate/index.vm b/src/identity-server/templates/core/authenticator/totp/authenticate/index.vm index c8ec56dd..a41a23c0 100644 --- a/src/identity-server/templates/core/authenticator/totp/authenticate/index.vm +++ b/src/identity-server/templates/core/authenticator/totp/authenticate/index.vm @@ -58,8 +58,8 @@
- + ## This can be enabled seperatly in each of the authenticators that use this template. Some may ## allow registration during login while other don't. As a best practice, create two different @@ -75,6 +75,7 @@ #end +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/totp/register/index.vm b/src/identity-server/templates/core/authenticator/totp/register/index.vm index f1dcde9d..2302e9e4 100644 --- a/src/identity-server/templates/core/authenticator/totp/register/index.vm +++ b/src/identity-server/templates/core/authenticator/totp/register/index.vm @@ -129,8 +129,8 @@ #set($otpInputLength = $_totpLength) #parse("fragments/otp-input") - + @@ -150,6 +150,7 @@ }); +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/totp/set-alias/index.vm b/src/identity-server/templates/core/authenticator/totp/set-alias/index.vm index 74ee4d10..aa5c5032 100644 --- a/src/identity-server/templates/core/authenticator/totp/set-alias/index.vm +++ b/src/identity-server/templates/core/authenticator/totp/set-alias/index.vm @@ -59,11 +59,12 @@ required value="$!alias" autocapitalize="none" maxlength="30"> - + +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/webauthn/authenticate-device/get.vm b/src/identity-server/templates/core/authenticator/webauthn/authenticate-device/get.vm index aa44c779..677e985b 100644 --- a/src/identity-server/templates/core/authenticator/webauthn/authenticate-device/get.vm +++ b/src/identity-server/templates/core/authenticator/webauthn/authenticate-device/get.vm @@ -52,14 +52,14 @@ - + #end ## ($_promptForUsername) @@ -72,6 +72,7 @@ #parse("authenticator/webauthn/js/authenticate-device") +#parse("fragments/button-loading") #end ## /body #parse("layouts/default") diff --git a/src/identity-server/templates/core/authenticator/webauthn/register/get.vm b/src/identity-server/templates/core/authenticator/webauthn/register/get.vm index fa35b48e..7f7cc5e0 100644 --- a/src/identity-server/templates/core/authenticator/webauthn/register/get.vm +++ b/src/identity-server/templates/core/authenticator/webauthn/register/get.vm @@ -28,38 +28,38 @@ #parse("authenticator/webauthn/fragments/alerts") +#parse("fragments/button-loading") #end #parse("layouts/default") diff --git a/src/identity-server/templates/core/views/oauth/confirm-usercode.vm b/src/identity-server/templates/core/views/oauth/confirm-usercode.vm index 993eb746..06965cd9 100644 --- a/src/identity-server/templates/core/views/oauth/confirm-usercode.vm +++ b/src/identity-server/templates/core/views/oauth/confirm-usercode.vm @@ -20,10 +20,11 @@

#message("views.oauth.confirm")

#message("views.oauth.confirm-description")

- + +#parse("fragments/button-loading") #end diff --git a/src/identity-server/templates/core/views/oauth/consent.vm b/src/identity-server/templates/core/views/oauth/consent.vm index 3e58b26a..1522b806 100644 --- a/src/identity-server/templates/core/views/oauth/consent.vm +++ b/src/identity-server/templates/core/views/oauth/consent.vm @@ -142,10 +142,10 @@ #* If all the required consent is given, enable the submit button *# - +
- + #if ($_client.get("policyUrl") || $_client.get("termsOfServiceUrl"))
@@ -169,6 +169,7 @@ +#parse("fragments/button-loading") #end diff --git a/src/identity-server/templates/core/views/oauth/enter-usercode.vm b/src/identity-server/templates/core/views/oauth/enter-usercode.vm index 274aebeb..89091d5a 100644 --- a/src/identity-server/templates/core/views/oauth/enter-usercode.vm +++ b/src/identity-server/templates/core/views/oauth/enter-usercode.vm @@ -23,10 +23,11 @@ #set($otpInputLength = $_userCodeLength) #parse("fragments/otp-input") - + +#parse("fragments/button-loading") #end From 5695a763b356d101ccadf34b3a83cc6a3790ed4c Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Tue, 17 Mar 2026 10:06:45 +0100 Subject: [PATCH 2/2] IS-11032 Preserve submit button value and original disabled state during loading spinner --- .../core/fragments/button-loading.vm | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/identity-server/templates/core/fragments/button-loading.vm b/src/identity-server/templates/core/fragments/button-loading.vm index ee06c4a2..93da8e9d 100644 --- a/src/identity-server/templates/core/fragments/button-loading.vm +++ b/src/identity-server/templates/core/fragments/button-loading.vm @@ -18,7 +18,15 @@ var loadingButtons = document.querySelectorAll('.button-loading-active'); loadingButtons.forEach(function(btn) { btn.classList.remove('button-loading-active'); - btn.disabled = false; + // Only re-enable if the button wasn't originally disabled + if (!btn.hasAttribute('data-was-disabled')) { + btn.disabled = false; + } + }); + // Clean up any hidden inputs we injected + var hiddenInputs = document.querySelectorAll('.button-loading-hidden-input'); + hiddenInputs.forEach(function(input) { + input.parentNode.removeChild(input); }); } @@ -81,8 +89,27 @@ // Add loading state to all submit buttons in this form var submitButtons = form.querySelectorAll('button[type="submit"], input[type="submit"]'); + // Find the button that actually triggered the submit (if any) + var activeElement = document.activeElement; + var clickedButton = (activeElement && activeElement.form === form && + (activeElement.type === 'submit')) ? activeElement : null; + submitButtons.forEach(function(btn) { if (!btn.classList.contains('button-loading-active')) { + // If this button has a name and is the one that was clicked, + // preserve its value as a hidden input so the server receives it + if (btn.name && btn === clickedButton) { + var hidden = document.createElement('input'); + hidden.type = 'hidden'; + hidden.name = btn.name; + hidden.value = btn.value || ''; + hidden.className = 'button-loading-hidden-input'; + form.appendChild(hidden); + } + // Remember if this button was already disabled + if (btn.disabled) { + btn.setAttribute('data-was-disabled', 'true'); + } btn.classList.add('button-loading-active'); btn.disabled = true; }