diff --git a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
index 4eb02ae3e..d5d3dab16 100644
--- a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
+++ b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
@@ -291,7 +291,29 @@
No
No
-
+
Buttons with internal loading indicators (currently only button supported)
+ Note that in some browsers, clicking these buttons minutely affects the appearance of Dropdown buttons, below. This is yet to be resolved.
+
+
+ Secondary
+
+
+ Small
+
+
+ Buttons where the text is replaced on click
+
+
+ Arbitrarily bigger
+
+
+
Mixtures
diff --git a/wagtail/wagtailadmin/static_src/wagtailadmin/js/core.js b/wagtail/wagtailadmin/static_src/wagtailadmin/js/core.js
index 09dd2a191..62b795a35 100644
--- a/wagtail/wagtailadmin/static_src/wagtailadmin/js/core.js
+++ b/wagtail/wagtailadmin/static_src/wagtailadmin/js/core.js
@@ -134,6 +134,7 @@ $(function() {
}
}
+
/* Functions that need to run/rerun when active tabs are changed */
$(document).on('shown.bs.tab', function(e) {
// Resize autosize textareas
@@ -141,4 +142,33 @@ $(function() {
autosize.update($(this).get());
});
});
+
+ /* Debounce submission of long-running forms and add spinner to give sense of activity */
+ $(document).on('click', 'button.button-longrunning', function(e){
+ var $self = $(this);
+ var timeoutLength = 10000; // Button re-enables after this time, to allow for errors in submissions causing forms to be permanently un-usable
+ var dataname = 'disabledtimeout'
+ var $replacementElem = $('em', $self);
+
+ e.preventDefault();
+
+ // save original button value
+ $self.data('original-text', $self.text());
+
+ if(!$self.data(dataname)) {
+ $self.data(dataname, setTimeout(function(){
+ clearTimeout($self.data(dataname));
+ $self.prop('disabled', '').removeData(dataname).removeClass('button-longrunning-active')
+ $replacementElem.text($self.data('original-text'));
+ }, timeoutLength));
+
+ if($self.data('clicked-text') && $replacementElem.length){
+ $replacementElem.text($self.data('clicked-text'));
+ }
+
+ $self.closest('form').submit();
+ $self.addClass('button-longrunning-active').prop('disabled', 'true');
+
+ }
+ });
});
diff --git a/wagtail/wagtailadmin/static_src/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static_src/wagtailadmin/scss/components/forms.scss
index 96cb1f941..61b9997e8 100644
--- a/wagtail/wagtailadmin/static_src/wagtailadmin/scss/components/forms.scss
+++ b/wagtail/wagtailadmin/static_src/wagtailadmin/scss/components/forms.scss
@@ -73,8 +73,8 @@ input, textarea, select, .richtext, .tagit{
}
&:disabled, &[disabled], &:disabled:hover, &[disabled]:hover{
background-color:inherit;
- cursor:not-allowed;
color:$color-grey-4;
+ cursor:default;
}
}
@@ -354,7 +354,7 @@ input[type=submit], input[type=reset], input[type=button], .button, button{
background-color:$color-grey-3 !important;
border-color:$color-grey-3 !important;
color:lighten($color-grey-2, 15%) !important;
- cursor:not-allowed;
+ cursor:default !important;
}
&.button-secondary:disabled, &.button-secondary[disabled], &.button-secondary.disabled{
background-color: white !important;
@@ -366,6 +366,43 @@ input[type=submit], input[type=reset], input[type=button], .button, button{
border:0 !important;
}
+ &.button-longrunning{
+ span{
+ @include transition(all 0.3s ease);
+ @include transform(scale(0.9));
+ display:inline-block;
+ height:0.9em;
+ position:relative;
+ opacity:0;
+ width:0;
+ visibility:hidden;
+ text-align:center;
+ padding-right:0em;
+ }
+ em{
+ font-style:normal;
+ }
+ &.button-longrunning-active span{
+ @include transform(scale(1));
+ visibility:visible;
+ width:1em;
+ opacity:0.8;
+ padding-right:0.5em;
+ }
+
+ .icon-spinner:after{
+ text-align:center;
+ position:absolute;
+ left:0;
+ margin:0;
+ line-height:1em;
+ display: inline-block;
+ font-size:1em;
+ }
+ }
+
+
+
@media screen and (min-width: $breakpoint-mobile){
font-size:0.95em;
padding:0 1.4em;
diff --git a/wagtail/wagtailadmin/static_src/wagtailadmin/scss/layouts/login.scss b/wagtail/wagtailadmin/static_src/wagtailadmin/scss/layouts/login.scss
index 1236fdbb8..13eea5c38 100644
--- a/wagtail/wagtailadmin/static_src/wagtailadmin/scss/layouts/login.scss
+++ b/wagtail/wagtailadmin/static_src/wagtailadmin/scss/layouts/login.scss
@@ -47,7 +47,7 @@ form{
width:auto;
color:white;
}
- input[type=submit]{
+ button{
font-size:1.5em;
padding:1.1em 2.4em;
height:3.5em;
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/login.html b/wagtail/wagtailadmin/templates/wagtailadmin/login.html
index 3364cf684..49061422e 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/login.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/login.html
@@ -56,7 +56,7 @@
{% endcomment %}
-
+