|
|
|
@ -1,9 +1,11 @@
|
|
|
|
|
/*jshint browser: true, devel:true*/ |
|
|
|
|
/*global jQuery, Drupal, Spinner*/ |
|
|
|
|
/** |
|
|
|
|
* @file |
|
|
|
|
* Triggers the display of a spinning icon when the form is submitted. |
|
|
|
|
*/ |
|
|
|
|
(function ($) { |
|
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
|
Drupal.behaviors.spinner = { |
|
|
|
|
attach: function(context, settings) { |
|
|
|
|
// Store what triggered the submit.
|
|
|
|
@ -15,35 +17,41 @@
|
|
|
|
|
// On enter the first submit button is assumed as is most often the
|
|
|
|
|
// case and this is part of the HTML 5 specification, although some
|
|
|
|
|
// Browsers may choose the button with the lowest tab-index.
|
|
|
|
|
if (event.which == 13) { |
|
|
|
|
if (event.which === 13) { |
|
|
|
|
$(this).data('clicked', $(':submit', this).first()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
for (var base in settings.spinner) { |
|
|
|
|
var id = '#' + base; |
|
|
|
|
// Don't add spinner to the hidden next/ingest button.
|
|
|
|
|
if (id != '#edit-hidden-next') { |
|
|
|
|
$.each(settings.spinner, function (base, value) { |
|
|
|
|
var id = '#' + base, |
|
|
|
|
message = $('<div/>').text(settings.spinner[base].message); |
|
|
|
|
if (id !== '#edit-hidden-next') { |
|
|
|
|
$(id, context).once('spinner', function () { |
|
|
|
|
var spinner = new Spinner(settings.spinner[base].opts); |
|
|
|
|
$(id).parents('form').one('submit', function (event) { |
|
|
|
|
if ($(this).data('clicked').is(id)) { |
|
|
|
|
$(id).parents('form').submit(function (event) { |
|
|
|
|
// If some other widget is preventing form submission we should
|
|
|
|
|
// not attempt to submit at this time.
|
|
|
|
|
if (event.isDefaultPrevented()) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if ($(this).data('clicked').is(id) && $(this).data('submitted') === undefined) { |
|
|
|
|
event.preventDefault(); |
|
|
|
|
// Prevent this from being entered a second time.
|
|
|
|
|
$(this).data('submitted', true); |
|
|
|
|
// Add Message.
|
|
|
|
|
var message = $('<div/>').text(settings.spinner[base].message); |
|
|
|
|
$(id).after(message); |
|
|
|
|
// Make UI changes.
|
|
|
|
|
spinner.spin(this); |
|
|
|
|
$('#edit-next').hide(); |
|
|
|
|
$('#edit-prev').hide(); |
|
|
|
|
// Submit the form after a set timeout, this handles problems with
|
|
|
|
|
// safari, in that safari submit's immediately..
|
|
|
|
|
if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { |
|
|
|
|
// safari, in that safari submits immediately..
|
|
|
|
|
if (navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) { |
|
|
|
|
$(':submit').attr('disabled', 'disabled'); |
|
|
|
|
} |
|
|
|
|
setTimeout(function () { |
|
|
|
|
// Allow for the button to be clicked, then click it then
|
|
|
|
|
// prevent the default behavoir.
|
|
|
|
|
// prevent the default behaviour.
|
|
|
|
|
$(id).removeAttr('disabled') |
|
|
|
|
.click() |
|
|
|
|
.click(function (event) { |
|
|
|
@ -55,7 +63,7 @@
|
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
})(jQuery); |
|
|
|
|