summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/branches/ajax_loading_spinner.js
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
commit85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch)
tree9160f299afd8c80c038f08e1545be119f5e3f1e1 /app/assets/javascripts/branches/ajax_loading_spinner.js
parent15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff)
downloadgitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'app/assets/javascripts/branches/ajax_loading_spinner.js')
-rw-r--r--app/assets/javascripts/branches/ajax_loading_spinner.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/app/assets/javascripts/branches/ajax_loading_spinner.js b/app/assets/javascripts/branches/ajax_loading_spinner.js
new file mode 100644
index 00000000000..79f4f919f3d
--- /dev/null
+++ b/app/assets/javascripts/branches/ajax_loading_spinner.js
@@ -0,0 +1,31 @@
+import $ from 'jquery';
+
+export default class AjaxLoadingSpinner {
+ static init() {
+ const $elements = $('.js-ajax-loading-spinner');
+ $elements.on('ajax:beforeSend', AjaxLoadingSpinner.ajaxBeforeSend);
+ }
+
+ static ajaxBeforeSend(e) {
+ const button = e.target;
+ const newButton = document.createElement('button');
+ newButton.classList.add('btn', 'btn-default', 'disabled', 'gl-button');
+ newButton.setAttribute('disabled', 'disabled');
+
+ const spinner = document.createElement('span');
+ spinner.classList.add('align-text-bottom', 'gl-spinner', 'gl-spinner-sm', 'gl-spinner-orange');
+ newButton.appendChild(spinner);
+
+ button.classList.add('hidden');
+ button.parentNode.insertBefore(newButton, button.nextSibling);
+
+ $(button).one('ajax:error', () => {
+ newButton.remove();
+ button.classList.remove('hidden');
+ });
+
+ $(button).one('ajax:success', () => {
+ $(button).off('ajax:beforeSend', AjaxLoadingSpinner.ajaxBeforeSend);
+ });
+ }
+}