wp_enqueue_media

The timeline below displays how wordpress function wp_enqueue_media has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    /*
     * We're going to pass the old thickbox media tabs to `media_upload_tabs`
     * to ensure plugins will work. We will then unset those tabs.
     */
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("SELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("SELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param stdClass[]|null $months An array of objects with `month` and `year`
     *                                properties, or `null` for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\t\tFROM {$wpdb->posts}\n\t\t\t\tWHERE post_type = %s\n\t\t\t\tORDER BY post_date DESC", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'errorDeleting' => __('Error in deleting the attachment.'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    /*
     * Ensure we enqueue media-editor first, that way media-views
     * is registered internally before we try to localize it. See #24724.
     */
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 2.1

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param stdClass[]|null $months An array of objects with `month` and `year`
     *                                properties, or `null` for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'errorDeleting' => __('Error in deleting the attachment.'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 6.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param stdClass[]|null $months An array of objects with `month` and `year`
     *                                properties, or `null` for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'errorDeleting' => __('Error in deleting the attachment.'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 1.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param stdClass[]|null $months An array of objects with `month` and `year`
     *                                properties, or `null` for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'errorDeleting' => __('Error in deleting the attachment.'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 6.1

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param stdClass[]|null $months An array of objects with `month` and `year`
     *                                properties, or `null` for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'errorDeleting' => __('Error in deleting the attachment.'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 9.6

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.9

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => _x('Unattached', 'media items'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 8.7

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.8

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    /**
     * Filters whether the Media Library grid has infinite scrolling. Default `false`.
     *
     * @since 5.8.0
     *
     * @param bool $infinite Whether the Media Library grid has infinite scrolling.
     */
    $infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
        'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        /* translators: %d: Number of attachments found in a search. */
        'mediaFound' => __('Number of media items found: %d'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 7.9

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 7.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .10

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 6.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .11

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.6

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Go to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .12

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.5

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload files'),
        'uploadImagesTitle' => __('Upload images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create gallery'),
        'editGalleryTitle' => __('Edit gallery'),
        'cancelGalleryTitle' => __('← Cancel gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image details'),
        'imageReplaceTitle' => __('Replace image'),
        'imageDetailsCancel' => __('Cancel edit'),
        'editImage' => __('Edit image'),
        // Crop Image.
        'chooseImage' => __('Choose image'),
        'selectAndCrop' => __('Select and crop'),
        'skipCropping' => __('Skip cropping'),
        'cropImage' => __('Crop image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio details'),
        'audioReplaceTitle' => __('Replace audio'),
        'audioAddSourceTitle' => __('Add audio source'),
        'audioDetailsCancel' => __('Cancel edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video details'),
        'videoReplaceTitle' => __('Replace video'),
        'videoAddSourceTitle' => __('Add video source'),
        'videoDetailsCancel' => __('Cancel edit'),
        'videoSelectPosterImageTitle' => __('Select poster image'),
        'videoAddTrackTitle' => __('Add subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create audio playlist'),
        'editPlaylistTitle' => __('Edit audio playlist'),
        'cancelPlaylistTitle' => __('← Cancel audio playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create video playlist'),
        'editVideoPlaylistTitle' => __('Edit video playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment Details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image.
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .13

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment Details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image.
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // DB default is 'file'.
        'align' => get_option('image_default_align'),
        // Empty default.
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null $show Whether to show the button, or `null` to decide based
     *                        on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null $months An array of objects with `month` and `year`
     *                           properties, or `null` (or any other non-array value)
     *                           for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic.
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload.
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library.
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // Backward compatibility pre-5.3.
        'searchMediaPlaceholder' => __('Search media items...'),
        // Placeholder (no ellipsis), backward compatibility pre-5.3.
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details.
        'attachmentDetails' => __('Attachment Details'),
        // From URL.
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images.
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery.
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image.
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image.
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio.
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video.
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist.
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist.
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings.
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
     * @param WP_Post  $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views
    // is registered internally before we try to localize it. See #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 3.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // backwards compatibility pre-5.3
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis), backwards compatibility pre-5.3
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .15

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // backwards compatibility pre-5.3
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis), backwards compatibility pre-5.3
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(
            /* translators: 1: Month, 2: Year. */
            __('%1$s %2$d'),
            $wp_locale->get_month($month_year->month),
            $month_year->year
        );
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'mediaFrameDefaultTitle' => __('Media'),
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchLabel' => __('Search'),
        'searchMediaLabel' => __('Search Media'),
        // backwards compatibility pre-5.3
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis), backwards compatibility pre-5.3
        'mediaFound' => __('Number of media items found: %d'),
        'mediaFoundHasMoreResults' => __('Number of media items displayed: %d. Scroll the page for more results.'),
        'noMedia' => __('No media items found.'),
        'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: Suggested width number, 2: Suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'filterAttachments' => __('Filter Media'),
        'attachmentsList' => __('Media list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 2.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'attachmentsList' => __('Attachments list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .20

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'attachmentsList' => __('Attachments list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 2.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'attachmentsList' => __('Attachments list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .18

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'attachmentsList' => __('Attachments list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'trashSelected' => __('Move to Trash'),
        'restoreSelected' => __('Restore from Trash'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Headings
        'attachmentsList' => __('Attachments list'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 1.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .16

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.1

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /*
         * translators: This is a would-be plural string used in the media manager.
         * If there is not a word you can use in your language to avoid issues with the
         * lack of plural support here, turn it into "selected: %d" then translate it.
         */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 0.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .20

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 0.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .19

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 9.6

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 9.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .23

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .20

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 9.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .10

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'mine' => _x('Mine', 'media items'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.9

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Add Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.8

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    /**
     * Allows showing or hiding the "Create Audio Playlist" button in the media library.
     *
     * By default, the "Create Audio Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any audio items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any audio files exist in the media library.
     */
    $show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
    if (null === $show_audio_playlist) {
        $show_audio_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows showing or hiding the "Create Video Playlist" button in the media library.
     *
     * By default, the "Create Video Playlist" button will always be shown in
     * the media library.  If this filter returns `null`, a query will be run
     * to determine whether the media library contains any video items.  This
     * was the default behavior prior to version 4.8.0, but this query is
     * expensive for large media libraries.
     *
     * @since 4.7.4
     * @since 4.8.0 The filter's default value is `true` rather than `null`.
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param bool|null Whether to show the button, or `null` to decide based
     *                  on whether any video files exist in the media library.
     */
    $show_video_playlist = apply_filters('media_library_show_video_playlist', true);
    if (null === $show_video_playlist) {
        $show_video_playlist = $wpdb->get_var("\n\t\t\tSELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 1\n\t\t");
    }
    /**
     * Allows overriding the list of months displayed in the media library.
     *
     * By default (if this filter does not return an array), a query will be
     * run to determine the months that have media items.  This query can be
     * expensive for large media libraries, so it may be desirable for sites to
     * override this behavior.
     *
     * @since 4.7.4
     *
     * @link https://core.trac.wordpress.org/ticket/31071
     *
     * @param array|null An array of objects with `month` and `year`
     *                   properties, or `null` (or any other non-array value)
     *                   for default behavior.
     */
    $months = apply_filters('media_library_months_with_files', null);
    if (!is_array($months)) {
        $months = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tORDER BY post_date DESC\n\t\t", 'attachment'));
    }
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'wpRestApi' => wp_create_nonce('wp_rest')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
        'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        /* translators: 1: suggested width number, 2: suggested height number. */
        'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.7

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'searchMediaPlaceholder' => __('Search media items...'),
        // placeholder (no ellipsis)
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 6.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .26

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.6

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filters the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filters the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .30

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 5.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .29

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.5

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media files found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .30

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $post_type_object->labels->insert_into_item,
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 3.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .31

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.3

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb
 * @global WP_Locale $wp_locale
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    if ($post) {
        $post_type_object = get_post_type_object($post->post_type);
    } else {
        $post_type_object = get_post_type_object('post');
    }
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
        'setFeaturedImage' => $post_type_object->labels->set_featured_image,
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 2.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 * @return array List of media view settings.
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .35

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 * @return array List of media view settings.
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.2

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post A post object or ID.
 * }
 * @return array List of media view settings.
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (wp_attachment_is('audio', $post)) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (wp_attachment_is('video', $post)) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder media files.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 1.5

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .40

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 1.4

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: .38

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.1

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => _x('Trash', 'noun'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        'noMedia' => __('No media attachments found.'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 4.0

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb, $wp_locale;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $months = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = %s\n\t\tORDER BY post_date DESC\n\t", 'attachment'));
    foreach ($months as $month_year) {
        $month_year->text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($month_year->month), $month_year->year);
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $has_audio ? 1 : 0, 'video' => $has_video ? 1 : 0),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
        'months' => $months,
        'mediaTrash' => MEDIA_TRASH ? 1 : 0,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'allMediaTypes' => __('All media types'),
        'allDates' => __('All dates'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'unattached' => __('Unattached'),
        'trash' => __('Trash'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkDelete' => __("You are about to permanently delete these items.\n  'Cancel' to stop, 'OK' to delete."),
        'warnBulkTrash' => __("You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete."),
        'bulkSelect' => __('Bulk Select'),
        'cancelSelection' => __('Cancel Selection'),
        'trashSelected' => __('Trash Selected'),
        'untrashSelected' => __('Untrash Selected'),
        'deleteSelected' => __('Delete Selected'),
        'deletePermanently' => __('Delete Permanently'),
        'apply' => __('Apply'),
        'filterByDate' => __('Filter by date'),
        'filterByType' => __('Filter by type'),
        'searchMediaLabel' => __('Search Media'),
        // Library Details
        'attachmentDetails' => __('Attachment Details'),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
        // Media Library
        'editMetadata' => __('Edit Metadata'),
        'noMedia' => __('No media attachments found.'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    // Ensure we enqueue media-editor first, that way media-views is
    // registered internally before we try to localize it. see #24724.
    wp_enqueue_script('media-editor');
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 9.1

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width, $wpdb;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $has_audio = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'audio%'\n\t\tLIMIT 1\n\t");
    $has_video = $wpdb->get_var("\n\t\tSELECT ID\n\t\tFROM {$wpdb->posts}\n\t\tWHERE post_type = 'attachment'\n\t\tAND post_mime_type LIKE 'video%'\n\t\tLIMIT 1\n\t");
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => (int) $has_audio, 'video' => (int) $has_video),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => __('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-editor');
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 3.9

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    global $content_width;
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    /** This filter is documented in wp-admin/includes/media.php */
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
    $mimes = get_allowed_mime_types();
    $ext_mimes = array();
    foreach ($exts as $ext) {
        foreach ($mimes as $ext_preg => $mime_match) {
            if (preg_match('#' . $ext . '#i', $ext_preg)) {
                $ext_mimes[$ext] = $mime_match;
                break;
            }
        }
    }
    $audio = $video = 0;
    $counts = (array) wp_count_attachments();
    foreach ($counts as $mime => $total) {
        if (0 === strpos($mime, 'audio/')) {
            $audio += (int) $total;
        } elseif (0 === strpos($mime, 'video/')) {
            $video += (int) $total;
        }
    }
    $settings = array(
        'tabs' => $tabs,
        'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
        'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
        /** This filter is documented in wp-admin/includes/media.php */
        'captions' => !apply_filters('disable_captions', ''),
        'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')),
        'post' => array('id' => 0),
        'defaultProps' => $props,
        'attachmentCounts' => array('audio' => $audio, 'video' => $video),
        'embedExts' => $exts,
        'embedMimes' => $ext_mimes,
        'contentWidth' => $content_width,
    );
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
        if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
            if (0 === strpos($post->post_mime_type, 'audio/')) {
                $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
            } elseif (0 === strpos($post->post_mime_type, 'video/')) {
                $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
            }
        }
        if ($thumbnail_support) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        'update' => __('Update'),
        'replace' => __('Replace'),
        'remove' => __('Remove'),
        'back' => __('Back'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'createNewPlaylist' => __('Create a new playlist'),
        'createNewVideoPlaylist' => __('Create a new video playlist'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
        // Edit Image
        'imageDetailsTitle' => __('Image Details'),
        'imageReplaceTitle' => __('Replace Image'),
        'imageDetailsCancel' => __('Cancel Edit'),
        'editImage' => __('Edit Image'),
        // Crop Image
        'chooseImage' => __('Choose Image'),
        'selectAndCrop' => __('Select and Crop'),
        'skipCropping' => __('Skip Cropping'),
        'cropImage' => __('Crop Image'),
        'cropYourImage' => __('Crop your image'),
        'cropping' => __('Cropping…'),
        'suggestedDimensions' => __('Suggested image dimensions:'),
        'cropError' => __('There has been an error cropping your image.'),
        // Edit Audio
        'audioDetailsTitle' => __('Audio Details'),
        'audioReplaceTitle' => __('Replace Audio'),
        'audioAddSourceTitle' => __('Add Audio Source'),
        'audioDetailsCancel' => __('Cancel Edit'),
        // Edit Video
        'videoDetailsTitle' => __('Video Details'),
        'videoReplaceTitle' => __('Replace Video'),
        'videoAddSourceTitle' => __('Add Video Source'),
        'videoDetailsCancel' => __('Cancel Edit'),
        'videoSelectPosterImageTitle' => _('Select Poster Image'),
        'videoAddTrackTitle' => __('Add Subtitles'),
        // Playlist
        'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
        'createPlaylistTitle' => __('Create Audio Playlist'),
        'editPlaylistTitle' => __('Edit Audio Playlist'),
        'cancelPlaylistTitle' => __('← Cancel Audio Playlist'),
        'insertPlaylist' => __('Insert audio playlist'),
        'updatePlaylist' => __('Update audio playlist'),
        'addToPlaylist' => __('Add to audio playlist'),
        'addToPlaylistTitle' => __('Add to Audio Playlist'),
        // Video Playlist
        'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
        'createVideoPlaylistTitle' => __('Create Video Playlist'),
        'editVideoPlaylistTitle' => __('Edit Video Playlist'),
        'cancelVideoPlaylistTitle' => __('← Cancel Video Playlist'),
        'insertVideoPlaylist' => __('Insert video playlist'),
        'updateVideoPlaylist' => __('Update video playlist'),
        'addToVideoPlaylist' => __('Add to video playlist'),
        'addToVideoPlaylistTitle' => __('Add to Video Playlist'),
    );
    /**
     * Filter the media view settings.
     *
     * @since 3.5.0
     *
     * @param array   $settings List of media view settings.
     * @param WP_Post $post     Post object.
     */
    $settings = apply_filters('media_view_settings', $settings, $post);
    /**
     * Filter the media view strings.
     *
     * @since 3.5.0
     *
     * @param array   $strings List of media view strings.
     * @param WP_Post $post    Post object.
     */
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-editor');
    wp_enqueue_script('media-audiovideo');
    wp_enqueue_style('media-views');
    if (is_admin()) {
        wp_enqueue_script('mce-view');
        wp_enqueue_script('image-edit');
    }
    wp_enqueue_style('imgareaselect');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    /**
     * Fires at the conclusion of wp_enqueue_media().
     *
     * @since 3.5.0
     */
    do_action('wp_enqueue_media');
}

WordPress Version: 3.8

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $settings = array('tabs' => $tabs, 'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')), 'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0), 'captions' => !apply_filters('disable_captions', ''), 'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')), 'post' => array('id' => 0), 'defaultProps' => $props, 'embedExts' => array_merge(wp_get_audio_extensions(), wp_get_video_extensions()));
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        if (current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail')) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
    );
    $settings = apply_filters('media_view_settings', $settings, $post);
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-editor');
    wp_enqueue_style('media-views');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
    do_action('wp_enqueue_media');
}

WordPress Version: 3.7

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 */
function wp_enqueue_media($args = array())
{
    // Enqueue me just once per page, please.
    if (did_action('wp_enqueue_media')) {
        return;
    }
    $defaults = array('post' => null);
    $args = wp_parse_args($args, $defaults);
    // We're going to pass the old thickbox media tabs to `media_upload_tabs`
    // to ensure plugins will work. We will then unset those tabs.
    $tabs = array(
        // handler action suffix => tab label
        'type' => '',
        'type_url' => '',
        'gallery' => '',
        'library' => '',
    );
    $tabs = apply_filters('media_upload_tabs', $tabs);
    unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
    $props = array(
        'link' => get_option('image_default_link_type'),
        // db default is 'file'
        'align' => get_option('image_default_align'),
        // empty default
        'size' => get_option('image_default_size'),
    );
    $settings = array('tabs' => $tabs, 'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')), 'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0), 'captions' => !apply_filters('disable_captions', ''), 'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor')), 'post' => array('id' => 0), 'defaultProps' => $props, 'embedExts' => array_merge(wp_get_audio_extensions(), wp_get_video_extensions()));
    $post = null;
    if (isset($args['post'])) {
        $post = get_post($args['post']);
        $settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
        if (current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail')) {
            $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
            $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
        }
    }
    $hier = $post && is_post_type_hierarchical($post->post_type);
    $strings = array(
        // Generic
        'url' => __('URL'),
        'addMedia' => __('Add Media'),
        'search' => __('Search'),
        'select' => __('Select'),
        'cancel' => __('Cancel'),
        /* translators: This is a would-be plural string used in the media manager.
        		   If there is not a word you can use in your language to avoid issues with the
        		   lack of plural support here, turn it into "selected: %d" then translate it.
        		 */
        'selected' => __('%d selected'),
        'dragInfo' => __('Drag and drop to reorder images.'),
        // Upload
        'uploadFilesTitle' => __('Upload Files'),
        'uploadImagesTitle' => __('Upload Images'),
        // Library
        'mediaLibraryTitle' => __('Media Library'),
        'insertMediaTitle' => __('Insert Media'),
        'createNewGallery' => __('Create a new gallery'),
        'returnToLibrary' => __('← Return to library'),
        'allMediaItems' => __('All media items'),
        'noItemsFound' => __('No items found.'),
        'insertIntoPost' => $hier ? __('Insert into page') : __('Insert into post'),
        'uploadedToThisPost' => $hier ? __('Uploaded to this page') : __('Uploaded to this post'),
        'warnDelete' => __("You are about to permanently delete this item.\n  'Cancel' to stop, 'OK' to delete."),
        // From URL
        'insertFromUrlTitle' => __('Insert from URL'),
        // Featured Images
        'setFeaturedImageTitle' => __('Set Featured Image'),
        'setFeaturedImage' => __('Set featured image'),
        // Gallery
        'createGalleryTitle' => __('Create Gallery'),
        'editGalleryTitle' => __('Edit Gallery'),
        'cancelGalleryTitle' => __('← Cancel Gallery'),
        'insertGallery' => __('Insert gallery'),
        'updateGallery' => __('Update gallery'),
        'addToGallery' => __('Add to gallery'),
        'addToGalleryTitle' => __('Add to Gallery'),
        'reverseOrder' => __('Reverse order'),
    );
    $settings = apply_filters('media_view_settings', $settings, $post);
    $strings = apply_filters('media_view_strings', $strings, $post);
    $strings['settings'] = $settings;
    wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
    wp_enqueue_script('media-editor');
    wp_enqueue_style('media-views');
    wp_plupload_default_settings();
    require_once ABSPATH . WPINC . '/media-template.php';
    add_action('admin_footer', 'wp_print_media_templates');
    add_action('wp_footer', 'wp_print_media_templates');
    do_action('wp_enqueue_media');
}