From 8dc65cff0a2f961ba7d955c079d57681059c3b7c Mon Sep 17 00:00:00 2001 From: Stan Silvert Date: Fri, 21 Apr 2017 14:11:44 -0400 Subject: [PATCH] KEYCLOAK-4121: Prevent double form submission --- .../theme/base/admin/resources/js/app.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/themes/src/main/resources/theme/base/admin/resources/js/app.js b/themes/src/main/resources/theme/base/admin/resources/js/app.js index c4a134b057..5f58e88f08 100755 --- a/themes/src/main/resources/theme/base/admin/resources/js/app.js +++ b/themes/src/main/resources/theme/base/admin/resources/js/app.js @@ -2168,15 +2168,29 @@ module.directive('kcEnter', function() { }; }); -module.directive('kcSave', function ($compile, Notifications) { +module.directive('kcSave', function ($compile, $timeout, Notifications) { + var clickDelay = 500; // 500 ms + return { restrict: 'A', link: function ($scope, elem, attr, ctrl) { elem.addClass("btn btn-primary"); elem.attr("type","submit"); - elem.bind('click', function() { + + var disabled = false; + elem.on('click', function(evt) { if ($scope.hasOwnProperty("changed") && !$scope.changed) return; + // KEYCLOAK-4121: Prevent double form submission + if (disabled) { + evt.preventDefault(); + evt.stopImmediatePropagation(); + return; + } else { + disabled = true; + $timeout(function () { disabled = false; }, clickDelay, false); + } + $scope.$apply(function() { var form = elem.closest('form'); if (form && form.attr('name')) {