wp/wp-includes/js/wp-util.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
window.wp = window.wp || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
(function ($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
	// Check for the utility settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	var settings = typeof _wpUtilSettings === 'undefined' ? {} : _wpUtilSettings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
	 * wp.template( id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
	 * Fetches a template by id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
	 * @param  {string} id   A string that corresponds to a DOM element with an id prefixed with "tmpl-".
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
	 *                       For example, "attachment" maps to "tmpl-attachment".
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
	 * @return {function}    A function that lazily-compiles the template requested.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
	wp.template = _.memoize(function ( id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
		var compiled,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
			options = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
				evaluate:    /<#([\s\S]+?)#>/g,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
				interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
				escape:      /\{\{([^\}]+?)\}\}(?!\})/g,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
				variable:    'data'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		return function ( data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
			compiled = compiled || _.template( $( '#tmpl-' + id ).html(), null, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			return compiled( data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
	});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
	// wp.ajax
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
	// ------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
	// Tools for sending ajax requests with JSON responses and built in error handling.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	// Mirrors and wraps jQuery's ajax APIs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
	wp.ajax = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		settings: settings.ajax || {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		 * wp.ajax.post( [action], [data] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		 * Sends a POST request to WordPress.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		 * @param  {string} action The slug of the action to fire in WordPress.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		 * @param  {object} data   The data to populate $_POST with.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		 * @return {$.promise}     A jQuery promise that represents the request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		post: function( action, data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
			return wp.ajax.send({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
				data: _.isObject( action ) ? action : _.extend( data || {}, { action: action })
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		 * wp.ajax.send( [action], [options] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		 * Sends a POST request to WordPress.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		 * @param  {string} action  The slug of the action to fire in WordPress.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		 * @param  {object} options The options passed to jQuery.ajax.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		 * @return {$.promise}      A jQuery promise that represents the request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		send: function( action, options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			if ( _.isObject( action ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				options = action;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
				options.data = _.extend( options.data || {}, { action: action });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			options = _.defaults( options || {}, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
				type:    'POST',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				url:     wp.ajax.settings.url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				context: this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			return $.Deferred( function( deferred ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
				// Transfer success/error callbacks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
				if ( options.success )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
					deferred.done( options.success );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				if ( options.error )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
					deferred.fail( options.error );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
				delete options.success;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
				delete options.error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
				// Use with PHP's wp_send_json_success() and wp_send_json_error()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				$.ajax( options ).done( function( response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
					// Treat a response of `1` as successful for backwards
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
					// compatibility with existing handlers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
					if ( response === '1' || response === 1 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
						response = { success: true };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
					if ( _.isObject( response ) && ! _.isUndefined( response.success ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
						deferred[ response.success ? 'resolveWith' : 'rejectWith' ]( this, [response.data] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
						deferred.rejectWith( this, [response] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				}).fail( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
					deferred.rejectWith( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			}).promise();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
}(jQuery));