WordPress 4.7.2
[autoinstalls/wordpress.git] / wp-admin / themes.php
index bf265b8f60c8d6d2cb2c92e04f5a8e4dbf72793c..6aa129d7653a90d7edb072b2c4394899102b62c8 100644 (file)
@@ -9,23 +9,50 @@
 /** WordPress Administration Bootstrap */
 require_once( dirname( __FILE__ ) . '/admin.php' );
 
-if ( !current_user_can('switch_themes') && !current_user_can('edit_theme_options') )
-       wp_die( __( 'Cheatin’ uh?' ), 403 );
+if ( ! current_user_can( 'switch_themes' ) && ! current_user_can( 'edit_theme_options' ) ) {
+       wp_die(
+               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+               '<p>' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>',
+               403
+       );
+}
 
 if ( current_user_can( 'switch_themes' ) && isset($_GET['action'] ) ) {
        if ( 'activate' == $_GET['action'] ) {
                check_admin_referer('switch-theme_' . $_GET['stylesheet']);
                $theme = wp_get_theme( $_GET['stylesheet'] );
-               if ( ! $theme->exists() || ! $theme->is_allowed() )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+
+               if ( ! $theme->exists() || ! $theme->is_allowed() ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The requested theme does not exist.' ) . '</p>',
+                               403
+                       );
+               }
+
                switch_theme( $theme->get_stylesheet() );
                wp_redirect( admin_url('themes.php?activated=true') );
                exit;
        } elseif ( 'delete' == $_GET['action'] ) {
                check_admin_referer('delete-theme_' . $_GET['stylesheet']);
                $theme = wp_get_theme( $_GET['stylesheet'] );
-               if ( !current_user_can('delete_themes') || ! $theme->exists() )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+
+               if ( ! current_user_can( 'delete_themes' ) ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'Sorry, you are not allowed to delete this item.' ) . '</p>',
+                               403
+                       );
+               }
+
+               if ( ! $theme->exists() ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The requested theme does not exist.' ) . '</p>',
+                               403
+                       );
+               }
+
                $active = wp_get_theme();
                if ( $active->get( 'Template' ) == $_GET['stylesheet'] ) {
                        wp_redirect( admin_url( 'themes.php?delete-active-child=true' ) );
@@ -47,7 +74,8 @@ if ( current_user_can( 'switch_themes' ) ) {
                '<ul><li>' . __( 'Hover or tap to see Activate and Live Preview buttons' ) . '</li>' .
                '<li>' . __( 'Click on the theme to see the theme name, version, author, description, tags, and the Delete link' ) . '</li>' .
                '<li>' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '</li></ul>' .
-               '<p>' . __( 'The current theme is displayed highlighted as the first theme.' ) . '</p>';
+               '<p>' . __( 'The current theme is displayed highlighted as the first theme.' ) . '</p>' .
+               '<p>' . __( 'The search for installed themes will search for terms in their name, description, author, or tag.' ) . ' <span id="live-search-desc">' . __( 'The search results will be updated as you type.' ) . '</span></p>';
 
        get_current_screen()->add_help_tab( array(
                'id'      => 'overview',
@@ -61,7 +89,7 @@ if ( current_user_can( 'install_themes' ) ) {
        if ( is_multisite() ) {
                $help_install = '<p>' . __('Installing themes on Multisite can only be done from the Network Admin section.') . '</p>';
        } else {
-               $help_install = '<p>' . sprintf( __('If you would like to see more themes to choose from, click on the &#8220;Add New&#8221; button and you will be able to browse or search for additional themes from the <a href="%s" target="_blank">WordPress.org Theme Directory</a>. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they&#8217;re free!'), 'https://wordpress.org/themes/' ) . '</p>';
+               $help_install = '<p>' . sprintf( __('If you would like to see more themes to choose from, click on the &#8220;Add New&#8221; button and you will be able to browse or search for additional themes from the <a href="%s">WordPress Theme Directory</a>. Themes in the WordPress Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they&#8217;re free!'), __( 'https://wordpress.org/themes/' ) ) . '</p>';
        }
 
        get_current_screen()->add_help_tab( array(
@@ -87,8 +115,8 @@ if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' )
 
 get_current_screen()->set_help_sidebar(
        '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
-       '<p>' . __( '<a href="http://codex.wordpress.org/Using_Themes" target="_blank">Documentation on Using Themes</a>' ) . '</p>' .
-       '<p>' . __( '<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
+       '<p>' . __( '<a href="https://codex.wordpress.org/Using_Themes">Documentation on Using Themes</a>' ) . '</p>' .
+       '<p>' . __( '<a href="https://wordpress.org/support/">Support Forums</a>' ) . '</p>'
 );
 
 if ( current_user_can( 'switch_themes' ) ) {
@@ -107,37 +135,40 @@ wp_localize_script( 'theme', '_wpThemeSettings', array(
                'adminUrl'      => parse_url( admin_url(), PHP_URL_PATH ),
        ),
        'l10n' => array(
-               'addNew' => __( 'Add New Theme' ),
-               'search'  => __( 'Search Installed Themes' ),
+               'addNew'            => __( 'Add New Theme' ),
+               'search'            => __( 'Search Installed Themes' ),
                'searchPlaceholder' => __( 'Search installed themes...' ), // placeholder (no ellipsis)
+               'themesFound'       => __( 'Number of Themes found: %d' ),
+               'noThemesFound'     => __( 'No themes found. Try a different search.' ),
        ),
 ) );
 
 add_thickbox();
 wp_enqueue_script( 'theme' );
+wp_enqueue_script( 'updates' );
 wp_enqueue_script( 'customize-loader' );
 
 require_once( ABSPATH . 'wp-admin/admin-header.php' );
 ?>
 
 <div class="wrap">
-       <h2><?php esc_html_e( 'Themes' ); ?>
+       <h1><?php esc_html_e( 'Themes' ); ?>
                <span class="title-count theme-count"><?php echo count( $themes ); ?></span>
        <?php if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?>
-               <a href="<?php echo admin_url( 'theme-install.php' ); ?>" class="hide-if-no-js add-new-h2"><?php echo esc_html_x( 'Add New', 'Add new theme' ); ?></a>
+               <a href="<?php echo admin_url( 'theme-install.php' ); ?>" class="hide-if-no-js page-title-action"><?php echo esc_html_x( 'Add New', 'Add new theme' ); ?></a>
        <?php endif; ?>
-       </h2>
+       </h1>
 <?php
 if ( ! validate_current_theme() || isset( $_GET['broken'] ) ) : ?>
-<div id="message1" class="updated"><p><?php _e('The active theme is broken. Reverting to the default theme.'); ?></p></div>
+<div id="message1" class="updated notice is-dismissible"><p><?php _e('The active theme is broken. Reverting to the default theme.'); ?></p></div>
 <?php elseif ( isset($_GET['activated']) ) :
                if ( isset( $_GET['previewed'] ) ) { ?>
-               <div id="message2" class="updated"><p><?php printf( __( 'Settings saved and theme activated. <a href="%s">Visit site</a>' ), home_url( '/' ) ); ?></p></div>
+               <div id="message2" class="updated notice is-dismissible"><p><?php _e( 'Settings saved and theme activated.' ); ?> <a href="<?php echo home_url( '/' ); ?>"><?php _e( 'Visit site' ); ?></a></p></div>
                <?php } else { ?>
-<div id="message2" class="updated"><p><?php printf( __( 'New theme activated. <a href="%s">Visit site</a>' ), home_url( '/' ) ); ?></p></div><?php
+<div id="message2" class="updated notice is-dismissible"><p><?php _e( 'New theme activated.' ); ?> <a href="<?php echo home_url( '/' ); ?>"><?php _e( 'Visit site' ); ?></a></p></div><?php
                }
        elseif ( isset($_GET['deleted']) ) : ?>
-<div id="message3" class="updated"><p><?php _e('Theme deleted.') ?></p></div>
+<div id="message3" class="updated notice is-dismissible"><p><?php _e('Theme deleted.') ?></p></div>
 <?php elseif ( isset( $_GET['delete-active-child'] ) ) : ?>
        <div id="message4" class="error"><p><?php _e( 'You cannot delete a theme while it has an active child theme.' ); ?></p></div>
 <?php
@@ -146,7 +177,7 @@ endif;
 $ct = wp_get_theme();
 
 if ( $ct->errors() && ( ! is_multisite() || current_user_can( 'manage_network_themes' ) ) ) {
-       echo '<div class="error"><p>' . sprintf( __( 'ERROR: %s' ), $ct->errors()->get_error_message() ) . '</p></div>';
+       echo '<div class="error"><p>' . __( 'ERROR:' ) . ' ' . $ct->errors()->get_error_message() . '</p></div>';
 }
 
 /*
@@ -169,17 +200,17 @@ if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() )
                                $submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index.
                                $menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
                                if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
-                                       $current_theme_actions[] = "<a class='button button-secondary$class' href='admin.php?page={$submenu[$item[2]][0][2]}'>{$item[0]}</a>";
+                                       $current_theme_actions[] = "<a class='button$class' href='admin.php?page={$submenu[$item[2]][0][2]}'>{$item[0]}</a>";
                                else
-                                       $current_theme_actions[] = "<a class='button button-secondary$class' href='{$submenu[$item[2]][0][2]}'>{$item[0]}</a>";
+                                       $current_theme_actions[] = "<a class='button$class' href='{$submenu[$item[2]][0][2]}'>{$item[0]}</a>";
                        } elseif ( ! empty( $item[2] ) && current_user_can( $item[1] ) ) {
                                $menu_file = $item[2];
 
                                if ( current_user_can( 'customize' ) ) {
                                        if ( 'custom-header' === $menu_file ) {
-                                               $current_theme_actions[] = "<a class='button button-secondary hide-if-no-customize$class' href='customize.php?autofocus[control]=header_image'>{$item[0]}</a>";
+                                               $current_theme_actions[] = "<a class='button hide-if-no-customize$class' href='customize.php?autofocus[control]=header_image'>{$item[0]}</a>";
                                        } elseif ( 'custom-background' === $menu_file ) {
-                                               $current_theme_actions[] = "<a class='button button-secondary hide-if-no-customize$class' href='customize.php?autofocus[control]=background_image'>{$item[0]}</a>";
+                                               $current_theme_actions[] = "<a class='button hide-if-no-customize$class' href='customize.php?autofocus[control]=background_image'>{$item[0]}</a>";
                                        }
                                }
 
@@ -188,9 +219,9 @@ if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() )
                                }
 
                                if ( file_exists( ABSPATH . "wp-admin/$menu_file" ) ) {
-                                       $current_theme_actions[] = "<a class='button button-secondary$class' href='{$item[2]}'>{$item[0]}</a>";
+                                       $current_theme_actions[] = "<a class='button$class' href='{$item[2]}'>{$item[0]}</a>";
                                } else {
-                                       $current_theme_actions[] = "<a class='button button-secondary$class' href='themes.php?page={$item[2]}'>{$item[0]}</a>";
+                                       $current_theme_actions[] = "<a class='button$class' href='themes.php?page={$item[2]}'>{$item[0]}</a>";
                                }
                        }
                }
@@ -199,7 +230,7 @@ if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() )
 ?>
 
 <div class="theme-browser">
-       <div class="themes">
+       <div class="themes wp-clearfix">
 
 <?php
 /*
@@ -218,13 +249,29 @@ foreach ( $themes as $theme ) :
        <?php } else { ?>
                <div class="theme-screenshot blank"></div>
        <?php } ?>
+
+       <?php if ( $theme['hasUpdate'] ) : ?>
+               <div class="update-message notice inline notice-warning notice-alt">
+               <?php if ( $theme['hasPackage'] ) : ?>
+                       <p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p>
+               <?php else : ?>
+                       <p><?php _e( 'New version available.' ); ?></p>
+               <?php endif; ?>
+               </div>
+       <?php endif; ?>
+
        <span class="more-details" id="<?php echo $aria_action; ?>"><?php _e( 'Theme Details' ); ?></span>
        <div class="theme-author"><?php printf( __( 'By %s' ), $theme['author'] ); ?></div>
 
        <?php if ( $theme['active'] ) { ?>
-               <h3 class="theme-name" id="<?php echo $aria_name; ?>"><span><?php _ex( 'Active:', 'theme' ); ?></span> <?php echo $theme['name']; ?></h3>
+               <h2 class="theme-name" id="<?php echo $aria_name; ?>">
+                       <?php
+                       /* translators: %s: theme name */
+                       printf( __( '<span>Active:</span> %s' ), $theme['name'] );
+                       ?>
+               </h2>
        <?php } else { ?>
-               <h3 class="theme-name" id="<?php echo $aria_name; ?>"><?php echo $theme['name']; ?></h3>
+               <h2 class="theme-name" id="<?php echo $aria_name; ?>"><?php echo $theme['name']; ?></h2>
        <?php } ?>
 
        <div class="theme-actions">
@@ -234,21 +281,19 @@ foreach ( $themes as $theme ) :
                        <a class="button button-primary customize load-customize hide-if-no-customize" href="<?php echo $theme['actions']['customize']; ?>"><?php _e( 'Customize' ); ?></a>
                <?php } ?>
        <?php } else { ?>
-               <a class="button button-secondary activate" href="<?php echo $theme['actions']['activate']; ?>"><?php _e( 'Activate' ); ?></a>
+               <?php
+               /* translators: %s: Theme name */
+               $aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
+               ?>
+               <a class="button activate" href="<?php echo $theme['actions']['activate']; ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
                <?php if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { ?>
                        <a class="button button-primary load-customize hide-if-no-customize" href="<?php echo $theme['actions']['customize']; ?>"><?php _e( 'Live Preview' ); ?></a>
-                       <a class="button button-secondary hide-if-customize" href="<?php echo $theme['actions']['preview']; ?>"><?php _e( 'Preview' ); ?></a>
                <?php } ?>
        <?php } ?>
 
        </div>
-
-       <?php if ( $theme['hasUpdate'] ) { ?>
-               <div class="theme-update"><?php _e( 'Update Available' ); ?></div>
-       <?php } ?>
 </div>
 <?php endforeach; ?>
-       <br class="clear" />
        </div>
 </div>
 <div class="theme-overlay"></div>
@@ -262,19 +307,22 @@ if ( ! is_multisite() && current_user_can('edit_themes') && $broken_themes = wp_
 
 <div class="broken-themes">
 <h3><?php _e('Broken Themes'); ?></h3>
-<p><?php _e('The following themes are installed but incomplete. Themes must have a stylesheet and a template.'); ?></p>
+<p><?php _e( 'The following themes are installed but incomplete.' ); ?></p>
 
 <?php
 $can_delete = current_user_can( 'delete_themes' );
+$can_install = current_user_can( 'install_themes' );
 ?>
 <table>
        <tr>
                <th><?php _ex('Name', 'theme name'); ?></th>
                <th><?php _e('Description'); ?></th>
                <?php if ( $can_delete ) { ?>
-                       <th></th>
+                       <td></td>
+               <?php } ?>
+               <?php if ( $can_install ) { ?>
+                       <td></td>
                <?php } ?>
-               </tr>
        </tr>
        <?php foreach ( $broken_themes as $broken_theme ) : ?>
                <tr>
@@ -289,9 +337,25 @@ $can_delete = current_user_can( 'delete_themes' );
                                ), admin_url( 'themes.php' ) );
                                $delete_url = wp_nonce_url( $delete_url, 'delete-theme_' . $stylesheet );
                                ?>
-                               <td><a href="<?php echo esc_url( $delete_url ); ?>" class="button button-secondary delete-theme"><?php _e( 'Delete' ); ?></a></td>
+                               <td><a href="<?php echo esc_url( $delete_url ); ?>" class="button delete-theme"><?php _e( 'Delete' ); ?></a></td>
                                <?php
                        }
+
+                       if ( $can_install && 'theme_no_parent' === $broken_theme->errors()->get_error_code() ) {
+                               $parent_theme_name = $broken_theme->get( 'Template' );
+                               $parent_theme = themes_api( 'theme_information', array( 'slug' => urlencode( $parent_theme_name ) ) );
+
+                               if ( ! is_wp_error( $parent_theme ) ) {
+                                       $install_url = add_query_arg( array(
+                                               'action' => 'install-theme',
+                                               'theme'  => urlencode( $parent_theme_name ),
+                                       ), admin_url( 'update.php' ) );
+                                       $install_url = wp_nonce_url( $install_url, 'install-theme_' . $parent_theme_name );
+                                       ?>
+                                       <td><a href="<?php echo esc_url( $install_url ); ?>" class="button install-theme"><?php _e( 'Install Parent Theme' ); ?></a></td>
+                                       <?php
+                               }
+                       }
                        ?>
                </tr>
        <?php endforeach; ?>
@@ -316,43 +380,59 @@ $can_delete = current_user_can( 'delete_themes' );
        <# } else { #>
                <div class="theme-screenshot blank"></div>
        <# } #>
-       <span class="more-details" id="{{ data.id }}-action"><?php _e( 'Theme Details' ); ?></span>
-       <div class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.author }}}' ); ?></div>
 
-       <# if ( data.active ) { #>
-               <h3 class="theme-name" id="{{ data.id }}-name"><span><?php _ex( 'Active:', 'theme' ); ?></span> {{{ data.name }}}</h3>
-       <# } else { #>
-               <h3 class="theme-name" id="{{ data.id }}-name">{{{ data.name }}}</h3>
+       <# if ( data.hasUpdate ) { #>
+               <# if ( data.hasPackage ) { #>
+                       <div class="update-message notice inline notice-warning notice-alt"><p><?php _e( 'New version available. <button class="button-link" type="button">Update now</button>' ); ?></p></div>
+               <# } else { #>
+                       <div class="update-message notice inline notice-warning notice-alt"><p><?php _e( 'New version available.' ); ?></p></div>
+               <# } #>
        <# } #>
 
-       <div class="theme-actions">
+       <span class="more-details" id="{{ data.id }}-action"><?php _e( 'Theme Details' ); ?></span>
+       <div class="theme-author">
+               <?php
+               /* translators: %s: Theme author name */
+               printf( __( 'By %s' ), '{{{ data.author }}}' );
+               ?>
+       </div>
 
        <# if ( data.active ) { #>
-               <# if ( data.actions.customize ) { #>
-                       <a class="button button-primary customize load-customize hide-if-no-customize" href="{{ data.actions.customize }}"><?php _e( 'Customize' ); ?></a>
-               <# } #>
+               <h2 class="theme-name" id="{{ data.id }}-name">
+                       <?php
+                       /* translators: %s: Theme name */
+                       printf( __( '<span>Active:</span> %s' ), '{{{ data.name }}}' );
+                       ?>
+               </h2>
        <# } else { #>
-               <a class="button button-secondary activate" href="{{{ data.actions.activate }}}"><?php _e( 'Activate' ); ?></a>
-               <a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
-               <a class="button button-secondary hide-if-customize" href="{{{ data.actions.preview }}}"><?php _e( 'Preview' ); ?></a>
+               <h2 class="theme-name" id="{{ data.id }}-name">{{{ data.name }}}</h2>
        <# } #>
 
+       <div class="theme-actions">
+               <# if ( data.active ) { #>
+                       <# if ( data.actions.customize ) { #>
+                               <a class="button button-primary customize load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Customize' ); ?></a>
+                       <# } #>
+               <# } else { #>
+                       <?php
+                       /* translators: %s: Theme name */
+                       $aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
+                       ?>
+                       <a class="button activate" href="{{{ data.actions.activate }}}" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
+                       <a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
+               <# } #>
        </div>
-
-       <# if ( data.hasUpdate ) { #>
-               <div class="theme-update"><?php _e( 'Update Available' ); ?></div>
-       <# } #>
 </script>
 
 <script id="tmpl-theme-single" type="text/template">
        <div class="theme-backdrop"></div>
-       <div class="theme-wrap">
+       <div class="theme-wrap wp-clearfix">
                <div class="theme-header">
                        <button class="left dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Show previous theme' ); ?></span></button>
                        <button class="right dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Show next theme' ); ?></span></button>
-                       <button class="close dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Close overlay' ); ?></span></button>
+                       <button class="close dashicons dashicons-no"><span class="screen-reader-text"><?php _e( 'Close details dialog' ); ?></span></button>
                </div>
-               <div class="theme-about">
+               <div class="theme-about wp-clearfix">
                        <div class="theme-screenshots">
                        <# if ( data.screenshot[0] ) { #>
                                <div class="screenshot"><img src="{{ data.screenshot[0] }}" alt="" /></div>
@@ -365,12 +445,12 @@ $can_delete = current_user_can( 'delete_themes' );
                                <# if ( data.active ) { #>
                                        <span class="current-label"><?php _e( 'Current Theme' ); ?></span>
                                <# } #>
-                               <h3 class="theme-name">{{{ data.name }}}<span class="theme-version"><?php printf( __( 'Version: %s' ), '{{{ data.version }}}' ); ?></span></h3>
-                               <h4 class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' ); ?></h4>
+                               <h2 class="theme-name">{{{ data.name }}}<span class="theme-version"><?php printf( __( 'Version: %s' ), '{{ data.version }}' ); ?></span></h2>
+                               <p class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' ); ?></p>
 
                                <# if ( data.hasUpdate ) { #>
-                               <div class="theme-update-message">
-                                       <h4 class="theme-update"><?php _e( 'Update Available' ); ?></h4>
+                               <div class="notice notice-warning notice-alt notice-large">
+                                       <h3 class="notice-title"><?php _e( 'Update Available' ); ?></h3>
                                        {{{ data.update }}}
                                </div>
                                <# } #>
@@ -392,18 +472,30 @@ $can_delete = current_user_can( 'delete_themes' );
                                <?php echo implode( ' ', $current_theme_actions ); ?>
                        </div>
                        <div class="inactive-theme">
+                               <?php
+                               /* translators: %s: Theme name */
+                               $aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
+                               ?>
                                <# if ( data.actions.activate ) { #>
-                                       <a href="{{{ data.actions.activate }}}" class="button button-secondary activate"><?php _e( 'Activate' ); ?></a>
+                                       <a href="{{{ data.actions.activate }}}" class="button activate" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
                                <# } #>
                                <a href="{{{ data.actions.customize }}}" class="button button-primary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
-                               <a href="{{{ data.actions.preview }}}" class="button button-secondary hide-if-customize"><?php _e( 'Preview' ); ?></a>
                        </div>
 
                        <# if ( ! data.active && data.actions['delete'] ) { #>
-                               <a href="{{{ data.actions['delete'] }}}" class="button button-secondary delete-theme"><?php _e( 'Delete' ); ?></a>
+                               <a href="{{{ data.actions['delete'] }}}" class="button delete-theme"><?php _e( 'Delete' ); ?></a>
                        <# } #>
                </div>
        </div>
 </script>
 
-<?php require( ABSPATH . 'wp-admin/admin-footer.php' );
+<?php
+wp_print_request_filesystem_credentials_modal();
+wp_print_admin_notice_templates();
+wp_print_update_row_templates();
+
+wp_localize_script( 'updates', '_wpUpdatesItemCounts', array(
+       'totals'  => wp_get_update_data(),
+) );
+
+require( ABSPATH . 'wp-admin/admin-footer.php' );