diff options
Diffstat (limited to 'src/wp-includes/js/wp-util.js')
-rw-r--r-- | src/wp-includes/js/wp-util.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/wp-includes/js/wp-util.js b/src/wp-includes/js/wp-util.js new file mode 100644 index 0000000000..701ec3ea43 --- /dev/null +++ b/src/wp-includes/js/wp-util.js @@ -0,0 +1,105 @@ +window.wp = window.wp || {}; + +(function ($) { + // Check for the utility settings. + var settings = typeof _wpUtilSettings === 'undefined' ? {} : _wpUtilSettings; + + /** + * wp.template( id ) + * + * Fetches a template by id. + * + * @param {string} id A string that corresponds to a DOM element with an id prefixed with "tmpl-". + * For example, "attachment" maps to "tmpl-attachment". + * @return {function} A function that lazily-compiles the template requested. + */ + wp.template = _.memoize(function ( id ) { + var compiled, + options = { + evaluate: /<#([\s\S]+?)#>/g, + interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, + escape: /\{\{([^\}]+?)\}\}(?!\})/g, + variable: 'data' + }; + + return function ( data ) { + compiled = compiled || _.template( $( '#tmpl-' + id ).html(), null, options ); + return compiled( data ); + }; + }); + + // wp.ajax + // ------ + // + // Tools for sending ajax requests with JSON responses and built in error handling. + // Mirrors and wraps jQuery's ajax APIs. + wp.ajax = { + settings: settings.ajax || {}, + + /** + * wp.ajax.post( [action], [data] ) + * + * Sends a POST request to WordPress. + * + * @param {string} action The slug of the action to fire in WordPress. + * @param {object} data The data to populate $_POST with. + * @return {$.promise} A jQuery promise that represents the request. + */ + post: function( action, data ) { + return wp.ajax.send({ + data: _.isObject( action ) ? action : _.extend( data || {}, { action: action }) + }); + }, + + /** + * wp.ajax.send( [action], [options] ) + * + * Sends a POST request to WordPress. + * + * @param {string} action The slug of the action to fire in WordPress. + * @param {object} options The options passed to jQuery.ajax. + * @return {$.promise} A jQuery promise that represents the request. + */ + send: function( action, options ) { + if ( _.isObject( action ) ) { + options = action; + } else { + options = options || {}; + options.data = _.extend( options.data || {}, { action: action }); + } + + options = _.defaults( options || {}, { + type: 'POST', + url: wp.ajax.settings.url, + context: this + }); + + return $.Deferred( function( deferred ) { + // Transfer success/error callbacks. + if ( options.success ) + deferred.done( options.success ); + if ( options.error ) + deferred.fail( options.error ); + + delete options.success; + delete options.error; + + // Use with PHP's wp_send_json_success() and wp_send_json_error() + $.ajax( options ).done( function( response ) { + // Treat a response of `1` as successful for backwards + // compatibility with existing handlers. + if ( response === '1' || response === 1 ) + response = { success: true }; + + if ( _.isObject( response ) && ! _.isUndefined( response.success ) ) + deferred[ response.success ? 'resolveWith' : 'rejectWith' ]( this, [response.data] ); + else + deferred.rejectWith( this, [response] ); + }).fail( function() { + deferred.rejectWith( this, arguments ); + }); + }).promise(); + } + }; + +}(jQuery)); |