docs: function() {
  			var self = this;
  
  			$.extend( self.options, self.element.data() );
  
  			// Use the 'type' query attribute in favor of 'post_mime_type'.
  			if ( self.options.query && self.options.query.post_mime_type ) {
  				self.options.query.type = self.options.query.post_mime_type;
  				delete self.options.query.post_mime_type;
  			}
  
  			self._content_id = 'wp-mediapicker-content-' + self.element.attr( 'id' );
  
  			self.element.hide().wrap( '<div class="wp-mediapicker-container" />' );
  
  			self._wrap          = self.element.parent();
  			self._open_button   = $( '<button type="button" class="wp-mediapicker-open-button button" />' ).insertAfter( self.element );
  			self._remove_button = $( '<button type="button" class="wp-mediapicker-remove-button button-link button-link-delete" />' ).hide().insertAfter( self._open_button ).text( self.options.label_remove );
  			self._content_wrap  = $( '<div class="wp-mediapicker-content-wrap" />' ).insertAfter( self._remove_button );
  			self._content       = $( '<div class="wp-mediapicker-content" />' ).appendTo( self._content_wrap ).attr( 'id', self._content_id );
  
  			self._frame = new MediaPickerFrame({
  				title: self.options.label_modal,
  				buttonText: self.options.label_button,
  				frame: 'select',
  				state: 'insert',
  				selection: new wp.media.model.Selection( [], {
  					multiple: self.options.multiple
  				}),
  				query: self.options.query,
  				multiple: self.options.multiple,
  				filterable: self.options.filterable,
  				searchable: self.options.searchable,
  				editable: self.options.editable
  			});
  
  			self._setValue( self.element.val() );
  
  			self._addListeners();
  		}