balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

media.js (5334B)


      1 /**
      2  * Creates a dialog containing posts that can have a particular media attached
      3  * to it.
      4  *
      5  * @since 2.7.0
      6  * @output wp-admin/js/media.js
      7  *
      8  * @namespace findPosts
      9  *
     10  * @requires jQuery
     11  */
     12 
     13 /* global ajaxurl, _wpMediaGridSettings, showNotice, findPosts */
     14 
     15 ( function( $ ){
     16 	window.findPosts = {
     17 		/**
     18 		 * Opens a dialog to attach media to a post.
     19 		 *
     20 		 * Adds an overlay prior to retrieving a list of posts to attach the media to.
     21 		 *
     22 		 * @since 2.7.0
     23 		 *
     24 		 * @memberOf findPosts
     25 		 *
     26 		 * @param {string} af_name The name of the affected element.
     27 		 * @param {string} af_val The value of the affected post element.
     28 		 *
     29 		 * @return {boolean} Always returns false.
     30 		 */
     31 		open: function( af_name, af_val ) {
     32 			var overlay = $( '.ui-find-overlay' );
     33 
     34 			if ( overlay.length === 0 ) {
     35 				$( 'body' ).append( '<div class="ui-find-overlay"></div>' );
     36 				findPosts.overlay();
     37 			}
     38 
     39 			overlay.show();
     40 
     41 			if ( af_name && af_val ) {
     42 				// #affected is a hidden input field in the dialog that keeps track of which media should be attached.
     43 				$( '#affected' ).attr( 'name', af_name ).val( af_val );
     44 			}
     45 
     46 			$( '#find-posts' ).show();
     47 
     48 			// Close the dialog when the escape key is pressed.
     49 			$('#find-posts-input').trigger( 'focus' ).on( 'keyup', function( event ){
     50 				if ( event.which == 27 ) {
     51 					findPosts.close();
     52 				}
     53 			});
     54 
     55 			// Retrieves a list of applicable posts for media attachment and shows them.
     56 			findPosts.send();
     57 
     58 			return false;
     59 		},
     60 
     61 		/**
     62 		 * Clears the found posts lists before hiding the attach media dialog.
     63 		 *
     64 		 * @since 2.7.0
     65 		 *
     66 		 * @memberOf findPosts
     67 		 *
     68 		 * @return {void}
     69 		 */
     70 		close: function() {
     71 			$('#find-posts-response').empty();
     72 			$('#find-posts').hide();
     73 			$( '.ui-find-overlay' ).hide();
     74 		},
     75 
     76 		/**
     77 		 * Binds a click event listener to the overlay which closes the attach media
     78 		 * dialog.
     79 		 *
     80 		 * @since 3.5.0
     81 		 *
     82 		 * @memberOf findPosts
     83 		 *
     84 		 * @return {void}
     85 		 */
     86 		overlay: function() {
     87 			$( '.ui-find-overlay' ).on( 'click', function () {
     88 				findPosts.close();
     89 			});
     90 		},
     91 
     92 		/**
     93 		 * Retrieves and displays posts based on the search term.
     94 		 *
     95 		 * Sends a post request to the admin_ajax.php, requesting posts based on the
     96 		 * search term provided by the user. Defaults to all posts if no search term is
     97 		 * provided.
     98 		 *
     99 		 * @since 2.7.0
    100 		 *
    101 		 * @memberOf findPosts
    102 		 *
    103 		 * @return {void}
    104 		 */
    105 		send: function() {
    106 			var post = {
    107 					ps: $( '#find-posts-input' ).val(),
    108 					action: 'find_posts',
    109 					_ajax_nonce: $('#_ajax_nonce').val()
    110 				},
    111 				spinner = $( '.find-box-search .spinner' );
    112 
    113 			spinner.addClass( 'is-active' );
    114 
    115 			/**
    116 			 * Send a POST request to admin_ajax.php, hide the spinner and replace the list
    117 			 * of posts with the response data. If an error occurs, display it.
    118 			 */
    119 			$.ajax( ajaxurl, {
    120 				type: 'POST',
    121 				data: post,
    122 				dataType: 'json'
    123 			}).always( function() {
    124 				spinner.removeClass( 'is-active' );
    125 			}).done( function( x ) {
    126 				if ( ! x.success ) {
    127 					$( '#find-posts-response' ).text( wp.i18n.__( 'An error has occurred. Please reload the page and try again.' ) );
    128 				}
    129 
    130 				$( '#find-posts-response' ).html( x.data );
    131 			}).fail( function() {
    132 				$( '#find-posts-response' ).text( wp.i18n.__( 'An error has occurred. Please reload the page and try again.' ) );
    133 			});
    134 		}
    135 	};
    136 
    137 	/**
    138 	 * Initializes the file once the DOM is fully loaded and attaches events to the
    139 	 * various form elements.
    140 	 *
    141 	 * @return {void}
    142 	 */
    143 	$( function() {
    144 		var settings, $mediaGridWrap = $( '#wp-media-grid' );
    145 
    146 		// Opens a manage media frame into the grid.
    147 		if ( $mediaGridWrap.length && window.wp && window.wp.media ) {
    148 			settings = _wpMediaGridSettings;
    149 
    150 			var frame = window.wp.media({
    151 				frame: 'manage',
    152 				container: $mediaGridWrap,
    153 				library: settings.queryVars
    154 			}).open();
    155 
    156 			// Fire a global ready event.
    157 			$mediaGridWrap.trigger( 'wp-media-grid-ready', frame );
    158 		}
    159 
    160 		// Prevents form submission if no post has been selected.
    161 		$( '#find-posts-submit' ).on( 'click', function( event ) {
    162 			if ( ! $( '#find-posts-response input[type="radio"]:checked' ).length )
    163 				event.preventDefault();
    164 		});
    165 
    166 		// Submits the search query when hitting the enter key in the search input.
    167 		$( '#find-posts .find-box-search :input' ).on( 'keypress', function( event ) {
    168 			if ( 13 == event.which ) {
    169 				findPosts.send();
    170 				return false;
    171 			}
    172 		});
    173 
    174 		// Binds the click event to the search button.
    175 		$( '#find-posts-search' ).on( 'click', findPosts.send );
    176 
    177 		// Binds the close dialog click event.
    178 		$( '#find-posts-close' ).on( 'click', findPosts.close );
    179 
    180 		// Binds the bulk action events to the submit buttons.
    181 		$( '#doaction' ).on( 'click', function( event ) {
    182 
    183 			/*
    184 			 * Handle the bulk action based on its value.
    185 			 */
    186 			$( 'select[name="action"]' ).each( function() {
    187 				var optionValue = $( this ).val();
    188 
    189 				if ( 'attach' === optionValue ) {
    190 					event.preventDefault();
    191 					findPosts.open();
    192 				} else if ( 'delete' === optionValue ) {
    193 					if ( ! showNotice.warn() ) {
    194 						event.preventDefault();
    195 					}
    196 				}
    197 			});
    198 		});
    199 
    200 		/**
    201 		 * Enables clicking on the entire table row.
    202 		 *
    203 		 * @return {void}
    204 		 */
    205 		$( '.find-box-inside' ).on( 'click', 'tr', function() {
    206 			$( this ).find( '.found-radio input' ).prop( 'checked', true );
    207 		});
    208 	});
    209 })( jQuery );