<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[31994] trunk/src: Accessibility improvements for Themes screen: fix keyboard events and callbacks for the Search field, increase trigger timeout a bit, improve Esc.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/31994">31994</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/31994","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>azaozz</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-04-03 02:31:11 +0000 (Fri, 03 Apr 2015)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Accessibility improvements for Themes screen: fix keyboard events and callbacks for the Search field, increase trigger timeout a bit, improve Esc. key handling.
Props joedolson, adamsilverstein, afercia, DrewAPicture. Fixes <a href="https://core.trac.wordpress.org/ticket/26600">#26600</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadmincssthemescss">trunk/src/wp-admin/css/themes.css</a></li>
<li><a href="#trunksrcwpadminjsthemejs">trunk/src/wp-admin/js/theme.js</a></li>
<li><a href="#trunksrcwpadminthemeinstallphp">trunk/src/wp-admin/theme-install.php</a></li>
<li><a href="#trunksrcwpadminthemesphp">trunk/src/wp-admin/themes.php</a></li>
<li><a href="#trunksrcwpadminupdatephp">trunk/src/wp-admin/update.php</a></li>
<li><a href="#trunksrcwpincludesscriptloaderphp">trunk/src/wp-includes/script-loader.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadmincssthemescss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/css/themes.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/css/themes.css 2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-admin/css/themes.css   2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1138,7 +1138,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        font-size: 18px;
</span><span class="cx" style="display: block; padding: 0 10px">        font-style: normal;
</span><span class="cx" style="display: block; padding: 0 10px">        margin: 0;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        padding: 100px 0 0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ padding: 0;
</ins><span class="cx" style="display: block; padding: 0 10px">         text-align: center;
</span><span class="cx" style="display: block; padding: 0 10px">        display: none;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpadminjsthemejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/js/theme.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/js/theme.js    2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-admin/js/theme.js      2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -79,8 +79,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Render and append
</span><span class="cx" style="display: block; padding: 0 10px">                this.view.render();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.$el.find( '.themes' ).remove();
-               this.$el.append( this.view.el ).addClass( 'rendered' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.$el.empty().append( this.view.el ).addClass( 'rendered' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 this.$el.append( '<br class="clear"/>' );
</span><span class="cx" style="display: block; padding: 0 10px">        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -157,6 +156,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                // Useful for resetting the views when you clean the input
</span><span class="cx" style="display: block; padding: 0 10px">                if ( this.terms === '' ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        this.reset( themes.data.themes );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        $( 'body' ).removeClass( 'no-results' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Trigger an 'update' event
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -831,6 +831,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        // The theme count element
</span><span class="cx" style="display: block; padding: 0 10px">        count: $( '.wp-core-ui .theme-count' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        // The live themes count
+       liveThemeCount: 0,
+
</ins><span class="cx" style="display: block; padding: 0 10px">         initialize: function( options ) {
</span><span class="cx" style="display: block; padding: 0 10px">                var self = this;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -854,8 +857,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                this.listenTo( self.collection, 'query:success', function( count ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( _.isNumber( count ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                self.count.text( count );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                self.announceSearchResults( count );
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                self.count.text( self.collection.length );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                self.announceSearchResults( self.collection.length );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -926,7 +931,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Display a live theme count for the collection
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                this.count.text( this.collection.count ? this.collection.count : this.collection.length );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         this.liveThemeCount = this.collection.count ? this.collection.count : this.collection.length;
+               this.count.text( this.liveThemeCount );
+
+               this.announceSearchResults( this.liveThemeCount );
</ins><span class="cx" style="display: block; padding: 0 10px">         },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Iterates through each instance of the collection
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1078,6 +1086,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        self.theme.trigger( 'theme:expand', previousModel.cid );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        },
+
+       // Dispatch audible search results feedback message
+       announceSearchResults: function( count ) {
+               if ( 0 === count ) {
+                       wp.a11y.speak( l10n.noThemesFound );
+               } else {
+                       wp.a11y.speak( l10n.themesFound.replace( '%d', count ) );
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1091,15 +1108,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        attributes: {
</span><span class="cx" style="display: block; padding: 0 10px">                placeholder: l10n.searchPlaceholder,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                type: 'search'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         type: 'search',
+               'aria-describedby': 'live-search-desc'
</ins><span class="cx" style="display: block; padding: 0 10px">         },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        events: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'input':  'search',
-               'keyup':  'search',
-               'change': 'search',
-               'search': 'search',
-               'blur':   'pushState'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'input': 'search',
+               'keyup': 'search',
+               'blur': 'pushState'
</ins><span class="cx" style="display: block; padding: 0 10px">         },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        initialize: function( options ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1112,20 +1128,22 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Runs a search on the theme collection.
</del><span class="cx" style="display: block; padding: 0 10px">         search: function( event ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var options = {};
-
</del><span class="cx" style="display: block; padding: 0 10px">                 // Clear on escape.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( event.type === 'keyup' && event.which === 27 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        event.target.value = '';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Lose input focus when pressing enter
-               if ( event.which === 13 ) {
-                       this.$el.trigger( 'blur' );
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         /**
+                * Since doSearch is debounced, it will only run when user input comes to a rest
+                */
+               this.doSearch( event );
+       },
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        // Runs a search on the theme collection.
+       doSearch: _.debounce( function( event ) {
+               var options = {};
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 this.collection.doSearch( event.target.value );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // if search is initiated and key is not return
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1141,7 +1159,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        themes.router.navigate( themes.router.baseUrl( '' ) );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        },
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }, 500 ),
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        pushState: function( event ) {
</span><span class="cx" style="display: block; padding: 0 10px">                var url = themes.router.baseUrl( '' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1252,6 +1270,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> themes.view.InstallerSearch =  themes.view.Search.extend({
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        events: {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'input': 'search',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'keyup': 'search'
</span><span class="cx" style="display: block; padding: 0 10px">        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1305,7 +1324,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Set route
</span><span class="cx" style="display: block; padding: 0 10px">                themes.router.navigate( themes.router.baseUrl( themes.router.searchPath + value ), { replace: true } );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        }, 300 )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }, 500 )
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> themes.view.Installer = themes.view.Appearance.extend({
</span></span></pre></div>
<a id="trunksrcwpadminthemeinstallphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/theme-install.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/theme-install.php      2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-admin/theme-install.php        2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -44,11 +44,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">        ),
</span><span class="cx" style="display: block; padding: 0 10px">        'l10n' => array(
</span><span class="cx" style="display: block; padding: 0 10px">                'addNew' => __( 'Add New Theme' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'search'  => __( 'Search Themes' ),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'search' => __( 'Search Themes' ),
</ins><span class="cx" style="display: block; padding: 0 10px">                 'searchPlaceholder' => __( 'Search themes...' ), // placeholder (no ellipsis)
</span><span class="cx" style="display: block; padding: 0 10px">                'upload' => __( 'Upload Theme' ),
</span><span class="cx" style="display: block; padding: 0 10px">                'back'   => __( 'Back' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'error'  => __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'error'  => __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>.' ),
+               'themesFound'   => __( 'Number of Themes found: %d' ),
+               'noThemesFound' => __( 'No themes found. Try a different search.' ),
</ins><span class="cx" style="display: block; padding: 0 10px">         ),
</span><span class="cx" style="display: block; padding: 0 10px">        'installedThemes' => array_keys( $installed_themes ),
</span><span class="cx" style="display: block; padding: 0 10px"> ) );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -70,7 +72,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> $help_overview =
</span><span class="cx" style="display: block; padding: 0 10px">        '<p>' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href="%s" target="_blank">WordPress.org Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'https://wordpress.org/themes/') . '</p>' .
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        '<p>' . __('You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.') . '</p>' .
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ '<p>' . __( 'You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter.' ) . ' <span id="live-search-desc">' . __( 'The search results will be updated as you type.' ) . '</span></p>' .
+       '<p>' . __( 'Alternately, you can browse the themes that are Featured, Popular, or Latest. When you find a theme you like, you can preview it or install it.' ) . '</p>' .
</ins><span class="cx" style="display: block; padding: 0 10px">         '<p>' . __('You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme&#8217;s folder via FTP into your <code>/wp-content/themes</code> directory.') . '</p>';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> get_current_screen()->add_help_tab( array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -166,10 +169,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        </div>
</span><span class="cx" style="display: block; padding: 0 10px">                </div>
</span><span class="cx" style="display: block; padding: 0 10px">        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <div class="theme-browser content-filterable" aria-live="polite">
-               <p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
-       </div>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <div class="theme-browser content-filterable"></div>
</ins><span class="cx" style="display: block; padding: 0 10px">         <div class="theme-install-overlay wp-full-overlay expanded"></div>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       <p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
</ins><span class="cx" style="display: block; padding: 0 10px">         <span class="spinner"></span>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        <br class="clear" />
</span></span></pre></div>
<a id="trunksrcwpadminthemesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/themes.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/themes.php     2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-admin/themes.php       2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -47,7 +47,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                '<ul><li>' . __( 'Hover or tap to see Activate and Live Preview buttons' ) . '</li>' .
</span><span class="cx" style="display: block; padding: 0 10px">                '<li>' . __( 'Click on the theme to see the theme name, version, author, description, tags, and the Delete link' ) . '</li>' .
</span><span class="cx" style="display: block; padding: 0 10px">                '<li>' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '</li></ul>' .
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                '<p>' . __( 'The current theme is displayed highlighted as the first theme.' ) . '</p>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         '<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>';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        get_current_screen()->add_help_tab( array(
</span><span class="cx" style="display: block; padding: 0 10px">                'id'      => 'overview',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -107,9 +108,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'adminUrl'      => parse_url( admin_url(), PHP_URL_PATH ),
</span><span class="cx" style="display: block; padding: 0 10px">        ),
</span><span class="cx" style="display: block; padding: 0 10px">        'l10n' => array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'addNew' => __( 'Add New Theme' ),
-               'search'  => __( 'Search Installed Themes' ),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'addNew'            => __( 'Add New Theme' ),
+               'search'            => __( 'Search Installed Themes' ),
</ins><span class="cx" style="display: block; padding: 0 10px">                 'searchPlaceholder' => __( 'Search installed themes...' ), // placeholder (no ellipsis)
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'themesFound'       => __( 'Number of Themes found: %d' ),
+               'noThemesFound'     => __( 'No themes found. Try a different search.' ),
</ins><span class="cx" style="display: block; padding: 0 10px">         ),
</span><span class="cx" style="display: block; padding: 0 10px"> ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -198,7 +201,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> ?>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<div class="theme-browser" aria-live="polite">
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<div class="theme-browser">
</ins><span class="cx" style="display: block; padding: 0 10px">         <div class="themes">
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -255,10 +258,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <?php endforeach; ?>
</span><span class="cx" style="display: block; padding: 0 10px">        <br class="clear" />
</span><span class="cx" style="display: block; padding: 0 10px">        </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
</del><span class="cx" style="display: block; padding: 0 10px"> </div>
</span><span class="cx" style="display: block; padding: 0 10px"> <div class="theme-overlay"></div>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
+
</ins><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><span class="cx" style="display: block; padding: 0 10px"> // List broken themes, if any.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! is_multisite() && current_user_can('edit_themes') && $broken_themes = wp_get_themes( array( 'errors' => true ) ) ) {
</span></span></pre></div>
<a id="trunksrcwpadminupdatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/update.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/update.php     2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-admin/update.php       2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -201,7 +201,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! current_user_can('install_themes') )
</span><span class="cx" style="display: block; padding: 0 10px">                        wp_die( __( 'You do not have sufficient permissions to install themes on this site.' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                include_once( ABSPATH . 'wp-admin/includes/theme-install.php' ); //for themes_api..
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); //for themes_api..
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                check_admin_referer( 'install-theme_' . $theme );
</span><span class="cx" style="display: block; padding: 0 10px">                $api = themes_api('theme_information', array('slug' => $theme, 'fields' => array('sections' => false, 'tags' => false) ) ); //Save on a bit of bandwidth.
</span></span></pre></div>
<a id="trunksrcwpincludesscriptloaderphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/script-loader.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/script-loader.php   2015-04-03 01:54:47 UTC (rev 31993)
+++ trunk/src/wp-includes/script-loader.php     2015-04-03 02:31:11 UTC (rev 31994)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -500,7 +500,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), false, 1 );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone' ), false, 1 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone', 'wp-a11y' ), false, 1 );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), false, 1 );
</span><span class="cx" style="display: block; padding: 0 10px">                did_action( 'init' ) && $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
</span></span></pre>
</div>
</div>

</body>
</html>