2018-06-28 04:30:15 +02:00
/ * *
* @ output wp - includes / js / wp - ajax - response . js
* /
2018-08-19 15:33:24 +02:00
/* global wpAjax */
window . wpAjax = jQuery . extend ( {
2012-08-23 02:04:18 +02:00
unserialize : function ( s ) {
var r = { } , q , pp , i , p ;
if ( ! s ) { return r ; }
q = s . split ( '?' ) ; if ( q [ 1 ] ) { s = q [ 1 ] ; }
pp = s . split ( '&' ) ;
for ( i in pp ) {
2021-02-23 20:45:04 +01:00
if ( typeof pp . hasOwnProperty === 'function' && ! pp . hasOwnProperty ( i ) ) { continue ; }
2012-08-23 02:04:18 +02:00
p = pp [ i ] . split ( '=' ) ;
r [ p [ 0 ] ] = p [ 1 ] ;
}
return r ;
} ,
2020-01-29 01:45:18 +01:00
parseAjaxResponse : function ( x , r , e ) { // 1 = good, 0 = strange (bad data?), -1 = you lack permission.
2022-04-11 06:37:00 +02:00
var parsed = { } , re = jQuery ( '#' + r ) . empty ( ) , err = '' , noticeMessage = '' ;
2012-08-23 02:04:18 +02:00
2020-06-14 13:28:07 +02:00
if ( x && typeof x === 'object' && x . getElementsByTagName ( 'wp_ajax' ) ) {
2012-08-23 02:04:18 +02:00
parsed . responses = [ ] ;
parsed . errors = false ;
jQuery ( 'response' , x ) . each ( function ( ) {
var th = jQuery ( this ) , child = jQuery ( this . firstChild ) , response ;
response = { action : th . attr ( 'action' ) , what : child . get ( 0 ) . nodeName , id : child . attr ( 'id' ) , oldId : child . attr ( 'old_id' ) , position : child . attr ( 'position' ) } ;
response . data = jQuery ( 'response_data' , child ) . text ( ) ;
response . supplemental = { } ;
if ( ! jQuery ( 'supplemental' , child ) . children ( ) . each ( function ( ) {
2022-04-11 06:37:00 +02:00
if ( this . nodeName === 'notice' ) {
noticeMessage += jQuery ( this ) . text ( ) ;
return ;
}
2012-08-23 02:04:18 +02:00
response . supplemental [ this . nodeName ] = jQuery ( this ) . text ( ) ;
2016-01-13 17:17:27 +01:00
} ) . length ) { response . supplemental = false ; }
2012-08-23 02:04:18 +02:00
response . errors = [ ] ;
if ( ! jQuery ( 'wp_error' , child ) . each ( function ( ) {
var code = jQuery ( this ) . attr ( 'code' ) , anError , errorData , formField ;
anError = { code : code , message : this . firstChild . nodeValue , data : false } ;
errorData = jQuery ( 'wp_error_data[code="' + code + '"]' , x ) ;
if ( errorData ) { anError . data = errorData . get ( ) ; }
formField = jQuery ( 'form-field' , errorData ) . text ( ) ;
if ( formField ) { code = formField ; }
if ( e ) { wpAjax . invalidateForm ( jQuery ( '#' + e + ' :input[name="' + code + '"]' ) . parents ( '.form-field:first' ) ) ; }
err += '<p>' + anError . message + '</p>' ;
response . errors . push ( anError ) ;
parsed . errors = true ;
2016-01-13 17:17:27 +01:00
} ) . length ) { response . errors = false ; }
2012-08-23 02:04:18 +02:00
parsed . responses . push ( response ) ;
} ) ;
2021-11-15 23:24:01 +01:00
if ( err . length ) {
2024-06-21 20:17:14 +02:00
re . html ( '<div class="notice notice-error" role="alert">' + err + '</div>' ) ;
2021-11-15 23:24:01 +01:00
wp . a11y . speak ( err ) ;
2022-04-11 06:37:00 +02:00
} else if ( noticeMessage . length ) {
2024-06-21 20:17:14 +02:00
re . html ( '<div class="notice notice-success is-dismissible" role="alert"><p>' + noticeMessage + '</p></div>' ) ;
2021-11-15 23:24:01 +01:00
jQuery ( document ) . trigger ( 'wp-updates-notice-added' ) ;
2022-04-11 06:37:00 +02:00
wp . a11y . speak ( noticeMessage ) ;
2021-11-15 23:24:01 +01:00
}
2012-08-23 02:04:18 +02:00
return parsed ;
}
2022-07-16 03:08:10 +02:00
if ( isNaN ( x ) ) {
wp . a11y . speak ( x ) ;
2024-06-21 20:17:14 +02:00
return ! re . html ( '<div class="notice notice-error" role="alert"><p>' + x + '</p></div>' ) ;
2022-07-16 03:08:10 +02:00
}
x = parseInt ( x , 10 ) ;
if ( - 1 === x ) {
wp . a11y . speak ( wpAjax . noPerm ) ;
2024-06-21 20:17:14 +02:00
return ! re . html ( '<div class="notice notice-error" role="alert"><p>' + wpAjax . noPerm + '</p></div>' ) ;
2022-07-16 03:08:10 +02:00
} else if ( 0 === x ) {
wp . a11y . speak ( wpAjax . broken ) ;
2024-06-21 20:17:14 +02:00
return ! re . html ( '<div class="notice notice-error" role="alert"><p>' + wpAjax . broken + '</p></div>' ) ;
2022-07-16 03:08:10 +02:00
}
2012-08-23 02:04:18 +02:00
return true ;
} ,
invalidateForm : function ( selector ) {
2015-09-14 12:39:27 +02:00
return jQuery ( selector ) . addClass ( 'form-invalid' ) . find ( 'input' ) . one ( 'change wp-check-valid-field' , function ( ) { jQuery ( this ) . closest ( '.form-invalid' ) . removeClass ( 'form-invalid' ) ; } ) ;
2012-08-23 02:04:18 +02:00
} ,
validateForm : function ( selector ) {
selector = jQuery ( selector ) ;
2016-01-13 17:17:27 +01:00
return ! wpAjax . invalidateForm ( selector . find ( '.form-required' ) . filter ( function ( ) { return jQuery ( 'input:visible' , this ) . val ( ) === '' ; } ) ) . length ;
2012-08-23 02:04:18 +02:00
}
2025-02-08 16:53:17 +01:00
} , wpAjax || { noPerm : 'Sorry, you are not allowed to do that.' , broken : 'An error occurred while processing your request. Please refresh the page and try again.' } ) ;
2012-08-23 02:04:18 +02:00
2020-01-29 01:45:18 +01:00
// Basic form validation.
2021-03-18 20:01:03 +01:00
jQuery ( function ( $ ) {
2021-01-22 13:32:03 +01:00
$ ( 'form.validate' ) . on ( 'submit' , function ( ) { return wpAjax . validateForm ( $ ( this ) ) ; } ) ;
2012-08-23 02:04:18 +02:00
} ) ;