Framework supports passing a "flash" option

This will request the Flash contents, if they are available. It also clears the flash bag contents, which is why this is an optional feature.
Introduced "ajaxValidation" event for capturing all invalid fields at once
This commit is contained in:
Samuel Georges 2016-11-18 07:39:54 +11:00
parent 381ae475c2
commit 10326c2d63
2 changed files with 24 additions and 7 deletions

View File

@ -7,6 +7,7 @@ use App;
use File;
use View;
use Lang;
use Flash;
use Event;
use Config;
use Session;
@ -645,6 +646,12 @@ class Controller
$responseContents['X_OCTOBER_REDIRECT'] = $result->getTargetUrl();
$result = null;
}
/*
* No redirect is used, look for any flash messages
*/
elseif (Request::header('X_OCTOBER_REQUEST_FLASH') && Flash::check()) {
$responseContents['X_OCTOBER_FLASH_MESSAGES'] = Flash::all();
}
/*
* If the handler returned an array, we should add it to output for rendering.

View File

@ -80,13 +80,19 @@ if (window.jQuery === undefined)
if (options.data !== undefined && !$.isEmptyObject(options.data))
data.push($.param(options.data))
var requestHeaders = {
'X-OCTOBER-REQUEST-HANDLER': handler,
'X-OCTOBER-REQUEST-PARTIALS': this.extractPartials(options.update)
}
if (options.flash !== undefined) {
requestHeaders['X-OCTOBER-REQUEST-FLASH'] = 1
}
var requestOptions = {
url: window.location.href,
context: context,
headers: {
'X-OCTOBER-REQUEST-HANDLER': handler,
'X-OCTOBER-REQUEST-PARTIALS': this.extractPartials(options.update)
},
headers: requestHeaders,
success: function(data, textStatus, jqXHR) {
/*
* Halt here if beforeUpdate() or data-request-before-update returns false
@ -149,13 +155,13 @@ if (window.jQuery === undefined)
* Trigger 'ajaxError' on the form, halt if event.preventDefault() is called
*/
var _event = jQuery.Event('ajaxError')
$triggerEl.trigger(_event, [context, textStatus, jqXHR])
$triggerEl.trigger(_event, [context, errorMsg, textStatus, jqXHR])
if (_event.isDefaultPrevented()) return
/*
* Halt here if the data-request-error attribute returns false
*/
if (options.evalError && eval('(function($el, context, textStatus, jqXHR) {'+options.evalError+'}.call($el.get(0), $el, context, textStatus, jqXHR))') === false)
if (options.evalError && eval('(function($el, context, errorMsg, textStatus, jqXHR) {'+options.evalError+'}.call($el.get(0), $el, context, errorMsg, textStatus, jqXHR))') === false)
return
requestOptions.handleErrorMessage(errorMsg)
@ -229,6 +235,8 @@ if (window.jQuery === undefined)
* Focus fields with errors
*/
if (data['X_OCTOBER_ERROR_FIELDS']) {
$triggerEl.trigger('ajaxValidation', [context, data['X_OCTOBER_ERROR_MESSAGE'], data['X_OCTOBER_ERROR_FIELDS']])
var isFirstInvalidField = true
$.each(data['X_OCTOBER_ERROR_FIELDS'], function focusErrorField(fieldName, fieldMessages) {
var fieldElement = $form.find('[name="'+fieldName+'"], [name="'+fieldName+'[]"], [name$="['+fieldName+']"], [name$="['+fieldName+'][]"]').filter(':enabled').first()
@ -251,8 +259,9 @@ if (window.jQuery === undefined)
if (data['X_OCTOBER_ASSETS']) {
assetManager.load(data['X_OCTOBER_ASSETS'], $.proxy(updatePromise.resolve, updatePromise))
}
else
else {
updatePromise.resolve()
}
return updatePromise
}
@ -329,6 +338,7 @@ if (window.jQuery === undefined)
confirm: $this.data('request-confirm'),
redirect: $this.data('request-redirect'),
loading: $this.data('request-loading'),
flash: $this.data('request-flash'),
update: paramToObj('data-request-update', $this.data('request-update')),
data: paramToObj('data-request-data', $this.data('request-data'))
}