... |
... |
@@ -1,24 +1,18 @@ |
1 |
|
-require(['jquery', 'xwiki-form-validation-async'], function($) { |
|
1 |
+require(['jquery'], function($) { |
2 |
2 |
var appNameInput = $('input[name="appName"]'); |
3 |
3 |
var appParentInput = $('input[name="appParentReference"]'); |
4 |
4 |
var preview = $('.appName-preview'); |
|
5 |
+ var submitButton = $('#wizard-next').prop('disabled', true); |
5 |
5 |
|
6 |
|
- if (appNameInput.val() === '') { |
7 |
|
- // We use a function instead of passing directly the promise because we want to avoid the "Uncaught (in promise)" |
8 |
|
- // error. Basically, we want the rejected promise to be caught. |
9 |
|
- appNameInput.validateAsync(() => Promise.reject(), 'awm'); |
10 |
|
- } |
11 |
|
- |
12 |
12 |
var errorMessage = appNameInput.closest('dd').prev('dt').find('.xErrorMsg'); |
13 |
|
- if (!errorMessage.length) { |
|
8 |
+ if (errorMessage.size() == 0) { |
14 |
14 |
errorMessage = $(document.createElement('span')).addClass('xErrorMsg').hide().appendTo(errorMessage.addBack()); |
15 |
15 |
} |
16 |
16 |
|
17 |
17 |
var toggleValidationError = function(message) { |
18 |
18 |
if (message) { |
19 |
|
- appNameInput.addClass('xErrorField'); |
|
14 |
+ appNameInput.addClass('xErrorField').focus(); |
20 |
20 |
errorMessage.text(message).show(); |
21 |
|
- return Promise.reject(); |
22 |
22 |
} else { |
23 |
23 |
appNameInput.removeClass('xErrorField'); |
24 |
24 |
errorMessage.hide(); |
... |
... |
@@ -28,24 +28,32 @@ |
28 |
28 |
var updatePreview = function(content) { |
29 |
29 |
preview.removeClass('loading').html(content); |
30 |
30 |
var error = preview.find('.xErrorMsg'); |
31 |
|
- return toggleValidationError(error.remove().text()); |
|
25 |
+ submitButton.prop('disabled', error.size() > 0); |
|
26 |
+ toggleValidationError(error.remove().text()); |
32 |
32 |
}; |
33 |
33 |
|
34 |
34 |
var fetchPreviewUpdate = function() { |
35 |
|
- if (appNameInput.val() === '') { |
36 |
|
- return updatePreview('<span class="xErrorMsg">$escapetool.javascript($services.localization.render("platform.appwithinminutes.appNameEmptyError"))</span>'); |
|
30 |
+ if (appNameInput.val() == '') { |
|
31 |
+ updatePreview('<span class="xErrorMsg">$escapetool.javascript($services.localization.render("platform.appwithinminutes.appNameEmptyError"))</span>'); |
37 |
37 |
} else { |
38 |
38 |
preview.addClass('loading'); |
39 |
|
- return $.get(XWiki.currentDocument.getURL('get'), appNameInput.closest('form').serialize()).then(updatePreview); |
|
34 |
+ $.get(XWiki.currentDocument.getURL('get'), submitButton.closest('form').serialize(), updatePreview); |
40 |
40 |
} |
41 |
41 |
}; |
42 |
42 |
|
43 |
|
- appNameInput.add(appParentInput).on('input', () => { |
44 |
|
- appNameInput.validateAsync(fetchPreviewUpdate, 500, 'awm'); |
45 |
|
- }).on('keyup', function(event) { |
46 |
|
- // Show the error message if the user presses Enter before typing anything. |
47 |
|
- if (event.which === 13 && appNameInput.val() === '' && !appNameInput.hasClass('xErrorField')) { |
48 |
|
- appNameInput.validateAsync(fetchPreviewUpdate, 'awm').catch(() => appNameInput.focus()); |
49 |
|
- } |
50 |
|
- }); |
|
38 |
+ var previewTimeout; |
|
39 |
+ var schedulePreviewUpdate = function() { |
|
40 |
+ clearTimeout(previewTimeout); |
|
41 |
+ submitButton.prop('disabled', true); |
|
42 |
+ setTimeout(fetchPreviewUpdate, 500); |
|
43 |
+ }; |
|
44 |
+ |
|
45 |
+ appNameInput.add(appParentInput) |
|
46 |
+ .on('input', schedulePreviewUpdate) |
|
47 |
+ .keyup(function(event) { |
|
48 |
+ // Show the error message if the user presses Enter before typing anything. |
|
49 |
+ if (event.which == 13 && appNameInput.val() == '' && !appNameInput.hasClass('xErrorField')) { |
|
50 |
+ fetchPreviewUpdate(); |
|
51 |
+ } |
|
52 |
+ }); |
51 |
51 |
}); |