| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| ( function( $ ) { |
| var wpApiSettings = window.wpApiSettings; |
|
|
| function apiRequest( options ) { |
| options = apiRequest.buildAjaxOptions( options ); |
| return apiRequest.transport( options ); |
| } |
|
|
| apiRequest.buildAjaxOptions = function( options ) { |
| var url = options.url; |
| var path = options.path; |
| var method = options.method; |
| var namespaceTrimmed, endpointTrimmed, apiRoot; |
| var headers, addNonceHeader, addAcceptHeader, headerName; |
|
|
| if ( |
| typeof options.namespace === 'string' && |
| typeof options.endpoint === 'string' |
| ) { |
| namespaceTrimmed = options.namespace.replace( /^\/|\/$/g, '' ); |
| endpointTrimmed = options.endpoint.replace( /^\//, '' ); |
| if ( endpointTrimmed ) { |
| path = namespaceTrimmed + '/' + endpointTrimmed; |
| } else { |
| path = namespaceTrimmed; |
| } |
| } |
| if ( typeof path === 'string' ) { |
| apiRoot = wpApiSettings.root; |
| path = path.replace( /^\//, '' ); |
|
|
| |
| |
| if ( 'string' === typeof apiRoot && -1 !== apiRoot.indexOf( '?' ) ) { |
| path = path.replace( '?', '&' ); |
| } |
|
|
| url = apiRoot + path; |
| } |
|
|
| |
| addNonceHeader = ! ( options.data && options.data._wpnonce ); |
| addAcceptHeader = true; |
|
|
| headers = options.headers || {}; |
|
|
| for ( headerName in headers ) { |
| if ( ! headers.hasOwnProperty( headerName ) ) { |
| continue; |
| } |
|
|
| |
| |
| switch ( headerName.toLowerCase() ) { |
| case 'x-wp-nonce': |
| addNonceHeader = false; |
| break; |
| case 'accept': |
| addAcceptHeader = false; |
| break; |
| } |
| } |
|
|
| if ( addNonceHeader ) { |
| |
| headers = $.extend( { |
| 'X-WP-Nonce': wpApiSettings.nonce |
| }, headers ); |
| } |
|
|
| if ( addAcceptHeader ) { |
| headers = $.extend( { |
| 'Accept': 'application/json, */*;q=0.1' |
| }, headers ); |
| } |
|
|
| if ( typeof method === 'string' ) { |
| method = method.toUpperCase(); |
|
|
| if ( 'PUT' === method || 'DELETE' === method ) { |
| headers = $.extend( { |
| 'X-HTTP-Method-Override': method |
| }, headers ); |
|
|
| method = 'POST'; |
| } |
| } |
|
|
| |
| options = $.extend( {}, options, { |
| headers: headers, |
| url: url, |
| method: method |
| } ); |
|
|
| delete options.path; |
| delete options.namespace; |
| delete options.endpoint; |
|
|
| return options; |
| }; |
|
|
| apiRequest.transport = $.ajax; |
|
|
| |
| window.wp = window.wp || {}; |
| window.wp.apiRequest = apiRequest; |
| } )( jQuery ); |
|
|