<!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>[40816] trunk: Widgets: Remove the title attributes used in the Tag cloud widget.</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/40816">40816</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/40816","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>afercia</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-05-22 20:23:49 +0000 (Mon, 22 May 2017)</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'>Widgets: Remove the title attributes used in the Tag cloud widget.

- improves accessibility using an aria-label attribute to match the information conveyed visually with the one exposed to assistive technologies
- adds an option in the widget to display the item counts, consistently with what other widgets already do (Archives, Categories)

Props adamsoucie, emirpprime, Samantha Miller., MikeLittle, rianrietveld, sami.keijonen, adamsilverstein, westonruter, afercia.
See <a href="https://core.trac.wordpress.org/ticket/24766">#24766</a>.
Fixes <a href="https://core.trac.wordpress.org/ticket/35566">#35566</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludescategorytemplatephp">trunk/src/wp-includes/category-template.php</a></li>
<li><a href="#trunksrcwpincludeswidgetsclasswpwidgettagcloudphp">trunk/src/wp-includes/widgets/class-wp-widget-tag-cloud.php</a></li>
<li><a href="#trunktestsphpunittestspostphp">trunk/tests/phpunit/tests/post.php</a></li>
<li><a href="#trunktestsphpunitteststermwpGenerateTagCloudphp">trunk/tests/phpunit/tests/term/wpGenerateTagCloud.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludescategorytemplatephp"></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/category-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/category-template.php       2017-05-22 16:15:25 UTC (rev 40815)
+++ trunk/src/wp-includes/category-template.php 2017-05-22 20:23:49 UTC (rev 40816)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -659,10 +659,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * be to return the top 45 tags in the tag cloud list.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * The 'topic_count_text' argument is a nooped plural from _n_noop() to generate the
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * text for the tooltip of the tag link.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * text for the tag link count.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * The 'topic_count_text_callback' argument is a function, which given the count
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * of the posts with that tag returns a text for the tooltip of the tag link.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * of the posts with that tag returns a text for the tag link count.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * The 'post_type' argument is used only when 'link' is set to 'edit'. It determines the post_type
</span><span class="cx" style="display: block; padding: 0 10px">  * passed to edit.php for the popular tags edit links.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -671,6 +671,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * should be used, because only one will be used and the other ignored, if they are both set.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 2.3.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 4.8.0 Added the `show_count` argument.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @param array|string|null $args Optional. Override default arguments.
</span><span class="cx" style="display: block; padding: 0 10px">  * @return void|array Generated tag cloud, only if no failures and 'array' is set for the 'format' argument.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -680,7 +681,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $defaults = array(
</span><span class="cx" style="display: block; padding: 0 10px">                'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
</span><span class="cx" style="display: block; padding: 0 10px">                'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'post_type' => '', 'echo' => true
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'post_type' => '', 'echo' => true,
+               'show_count' => 0,
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px">        $args = wp_parse_args( $args, $defaults );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -736,6 +738,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @todo Complete functionality.
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 2.3.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 4.8.0 Added the `show_count` argument.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @param array $tags List of tags.
</span><span class="cx" style="display: block; padding: 0 10px">  * @param string|array $args {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -766,11 +769,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *     @type int|bool $filter                     Whether to enable filtering of the final output
</span><span class="cx" style="display: block; padding: 0 10px">  *                                                via {@see 'wp_generate_tag_cloud'}. Default 1|true.
</span><span class="cx" style="display: block; padding: 0 10px">  *     @type string   $topic_count_text           Nooped plural text from _n_noop() to supply to
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- *                                                tag tooltips. Default null.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *                                                tag counts. Default null.
</ins><span class="cx" style="display: block; padding: 0 10px">  *     @type callable $topic_count_text_callback  Callback used to generate nooped plural text for
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- *                                                tag tooltips based on the count. Default null.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *                                                tag counts based on the count. Default null.
</ins><span class="cx" style="display: block; padding: 0 10px">  *     @type callable $topic_count_scale_callback Callback used to determine the tag count scaling
</span><span class="cx" style="display: block; padding: 0 10px">  *                                                value. Default default_topic_count_scale().
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *     @type bool|int $show_count                 Whether to display the tag counts. Default 0. Accepts
+ *                                                0, 1, or their bool equivalents.
</ins><span class="cx" style="display: block; padding: 0 10px">  * }
</span><span class="cx" style="display: block; padding: 0 10px">  * @return string|array Tag cloud as a string or an array, depending on 'format' argument.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -780,6 +785,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
</span><span class="cx" style="display: block; padding: 0 10px">                'topic_count_text' => null, 'topic_count_text_callback' => null,
</span><span class="cx" style="display: block; padding: 0 10px">                'topic_count_scale_callback' => 'default_topic_count_scale', 'filter' => 1,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'show_count' => 0,
</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">        $args = wp_parse_args( $args, $defaults );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -790,14 +796,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return $return;
</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">-        // Juggle topic count tooltips:
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Juggle topic counts.
</ins><span class="cx" style="display: block; padding: 0 10px">         if ( isset( $args['topic_count_text'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                // First look for nooped plural support via topic_count_text.
</span><span class="cx" style="display: block; padding: 0 10px">                $translate_nooped_plural = $args['topic_count_text'];
</span><span class="cx" style="display: block; padding: 0 10px">        } elseif ( ! empty( $args['topic_count_text_callback'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                // Look for the alternative callback style. Ignore the previous default.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $args['topic_count_text_callback'] === 'default_topic_count_text' ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $translate_nooped_plural = _n_noop( '%s topic', '%s topics' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $translate_nooped_plural = _n_noop( '%s item', '%s items' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        $translate_nooped_plural = false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -806,7 +812,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $translate_nooped_plural = _n_noop( $args['single_text'], $args['multiple_text'] );
</span><span class="cx" style="display: block; padding: 0 10px">        } else {
</span><span class="cx" style="display: block; padding: 0 10px">                // This is the default for when no callback, plural, or argument is passed in.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $translate_nooped_plural = _n_noop( '%s topic', '%s topics' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $translate_nooped_plural = _n_noop( '%s item', '%s items' );
</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">@@ -861,6 +867,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $font_spread = 1;
</span><span class="cx" style="display: block; padding: 0 10px">        $font_step = $font_spread / $spread;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        $aria_label = false;
+       /*
+        * Determine whether to output an 'aria-label' attribute with the tag name and count.
+        * When tags have a different font size, they visually convey an important information
+        * that should be available to assistive technologies too. On the other hand, sometimes
+        * themes set up the Tag Cloud to display all tags with the same font size (setting
+        * the 'smallest' and 'largest' arguments to the same value).
+        * In order to always serve the same content to all users, the 'aria-label' gets printed out:
+        * - when tags have a different size
+        * - when the tag count is displayed (for example when users check the checkbox in the
+        *   Tag Cloud widget), regardless of the tags font size
+        */
+       if ( $args['show_count'] || 0 !== $font_spread ) {
+               $aria_label = true;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         // Assemble the data that will be used to generate the tag cloud markup.
</span><span class="cx" style="display: block; padding: 0 10px">        $tags_data = array();
</span><span class="cx" style="display: block; padding: 0 10px">        foreach ( $tags as $key => $tag ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -870,21 +892,23 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $real_count = $real_counts[ $key ];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $translate_nooped_plural ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $title = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $formatted_count = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $title = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $formatted_count = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args );
</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">                $tags_data[] = array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'id'         => $tag_id,
-                       'url'        => '#' != $tag->link ? $tag->link : '#',
-                       'role'       => '#' != $tag->link ? '' : ' role="button"',
-                       'name'       => $tag->name,
-                       'title'      => $title,
-                       'slug'       => $tag->slug,
-                       'real_count' => $real_count,
-                       'class'      => 'tag-link-' . $tag_id,
-                       'font_size'  => $args['smallest'] + ( $count - $min_count ) * $font_step,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'id'              => $tag_id,
+                       'url'             => '#' != $tag->link ? $tag->link : '#',
+                       'role'            => '#' != $tag->link ? '' : ' role="button"',
+                       'name'            => $tag->name,
+                       'formatted_count' => $formatted_count,
+                       'slug'            => $tag->slug,
+                       'real_count'      => $real_count,
+                       'class'           => 'tag-cloud-link tag-link-' . $tag_id,
+                       'font_size'       => $args['smallest'] + ( $count - $min_count ) * $font_step,
+                       'aria_label'      => $aria_label ? sprintf( ' aria-label="%1$s (%2$s)"', esc_attr( $tag->name ), esc_attr( $formatted_count ) ) : '',
+                       'show_count'      => $args['show_count'] ? '<span class="tag-link-count"> (' . $real_count . ')</span>' : '',
</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">@@ -899,10 +923,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $a = array();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // generate the output links array
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Generate the output links array.
</ins><span class="cx" style="display: block; padding: 0 10px">         foreach ( $tags_data as $key => $tag_data ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $class = $tag_data['class'] . ' tag-link-position-' . ( $key + 1 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $a[] = "<a href='" . esc_url( $tag_data['url'] ) . "'" . $tag_data['role'] . " class='" . esc_attr( $class ) . "' title='" . esc_attr( $tag_data['title'] ) . "' style='font-size: " . esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ) . ";'>" . esc_html( $tag_data['name'] ) . "</a>";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $a[] = sprintf(
+                       '<a href="%1$s"%2$s class="%3$s" style="font-size: %4$s;"%5$s>%6$s%7$s</a>',
+                       esc_url( $tag_data['url'] ),
+                       $tag_data['role'],
+                       esc_attr( $class ),
+                       esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ),
+                       $tag_data['aria_label'],
+                       esc_html( $tag_data['name'] ),
+                       $tag_data['show_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">        switch ( $args['format'] ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -910,7 +943,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $return =& $a;
</span><span class="cx" style="display: block; padding: 0 10px">                        break;
</span><span class="cx" style="display: block; padding: 0 10px">                case 'list' :
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $return = "<ul class='wp-tag-cloud'>\n\t<li>";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 /*
+                        * Force role="list", as some browsers (sic: Safari 10) don't expose to assistive
+                        * technologies the default role when the list is styled with `list-style: none`.
+                        * Note: this is redundant but doesn't harm.
+                        */
+                       $return = "<ul class='wp-tag-cloud' role='list'>\n\t<li>";
</ins><span class="cx" style="display: block; padding: 0 10px">                         $return .= join( "</li>\n\t<li>", $a );
</span><span class="cx" style="display: block; padding: 0 10px">                        $return .= "</li>\n</ul>\n";
</span><span class="cx" style="display: block; padding: 0 10px">                        break;
</span></span></pre></div>
<a id="trunksrcwpincludeswidgetsclasswpwidgettagcloudphp"></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/widgets/class-wp-widget-tag-cloud.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/widgets/class-wp-widget-tag-cloud.php       2017-05-22 16:15:25 UTC (rev 40815)
+++ trunk/src/wp-includes/widgets/class-wp-widget-tag-cloud.php 2017-05-22 20:23:49 UTC (rev 40816)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,6 +53,8 @@
</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><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $show_count = ! empty( $instance['count'] );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Filters the taxonomy used in the Tag Cloud widget.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -64,8 +66,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param array $args Args used for the tag cloud widget.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                $tag_cloud = wp_tag_cloud( apply_filters( 'widget_tag_cloud_args', array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'taxonomy' => $current_taxonomy,
-                       'echo' => false
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'taxonomy'   => $current_taxonomy,
+                       'echo'       => false,
+                       'show_count' => $show_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">                if ( empty( $tag_cloud ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -102,6 +105,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function update( $new_instance, $old_instance ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $instance = array();
</span><span class="cx" style="display: block; padding: 0 10px">                $instance['title'] = sanitize_text_field( $new_instance['title'] );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $instance['count'] = ! empty( $new_instance['count'] ) ? 1 : 0;
</ins><span class="cx" style="display: block; padding: 0 10px">                 $instance['taxonomy'] = stripslashes($new_instance['taxonomy']);
</span><span class="cx" style="display: block; padding: 0 10px">                return $instance;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,6 +121,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function form( $instance ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $current_taxonomy = $this->_get_current_taxonomy($instance);
</span><span class="cx" style="display: block; padding: 0 10px">                $title_id = $this->get_field_id( 'title' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $count = isset( $instance['count'] ) ? (bool) $instance['count'] : false;
</ins><span class="cx" style="display: block; padding: 0 10px">                 $instance['title'] = ! empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                echo '<p><label for="' . $title_id .'">' . __( 'Title:' ) . '</label>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -128,6 +133,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $name = $this->get_field_name( 'taxonomy' );
</span><span class="cx" style="display: block; padding: 0 10px">                $input = '<input type="hidden" id="' . $id . '" name="' . $name . '" value="%s" />';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $count_checkbox = sprintf(
+                       '<p><input type="checkbox" class="checkbox" id="%1$s" name="%2$s"%3$s /> <label for="%1$s">%4$s</label></p>',
+                       $this->get_field_id( 'count' ),
+                       $this->get_field_name( 'count' ),
+                       checked( $count, true, false ),
+                       __( 'Show tag counts' )
+               );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 switch ( count( $taxonomies ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // No tag cloud supporting taxonomies found, display error message
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -136,14 +149,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        printf( $input, '' );
</span><span class="cx" style="display: block; padding: 0 10px">                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Just a single tag cloud supporting taxonomy found, no need to display options
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Just a single tag cloud supporting taxonomy found, no need to display a select.
</ins><span class="cx" style="display: block; padding: 0 10px">                 case 1:
</span><span class="cx" style="display: block; padding: 0 10px">                        $keys = array_keys( $taxonomies );
</span><span class="cx" style="display: block; padding: 0 10px">                        $taxonomy = reset( $keys );
</span><span class="cx" style="display: block; padding: 0 10px">                        printf( $input, esc_attr( $taxonomy ) );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        echo $count_checkbox;
</ins><span class="cx" style="display: block; padding: 0 10px">                         break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // More than one tag cloud supporting taxonomy found, display options
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // More than one tag cloud supporting taxonomy found, display a select.
</ins><span class="cx" style="display: block; padding: 0 10px">                 default:
</span><span class="cx" style="display: block; padding: 0 10px">                        printf(
</span><span class="cx" style="display: block; padding: 0 10px">                                '<p><label for="%1$s">%2$s</label>' .
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -162,7 +176,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">-                        echo '</select></p>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 echo '</select></p>' . $count_checkbox;
</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></pre></div>
<a id="trunktestsphpunittestspostphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/post.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/post.php        2017-05-22 16:15:25 UTC (rev 40815)
+++ trunk/tests/phpunit/tests/post.php  2017-05-22 20:23:49 UTC (rev 40816)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -939,7 +939,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'link' => 'edit'
</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">-                preg_match_all( "|href='([^']+)'|", $wp_tag_cloud, $matches );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         preg_match_all( '|href="([^"]+)"|', $wp_tag_cloud, $matches );
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->assertSame( 1, count( $matches[1] ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $terms = get_terms( $tax );
</span></span></pre></div>
<a id="trunktestsphpunitteststermwpGenerateTagCloudphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/term/wpGenerateTagCloud.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/term/wpGenerateTagCloud.php     2017-05-22 16:15:25 UTC (rev 40815)
+++ trunk/tests/phpunit/tests/term/wpGenerateTagCloud.php       2017-05-22 20:23:49 UTC (rev 40816)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,7 +119,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'format'     => 'list',
</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">-                $this->assertRegExp( "|^<ul class='wp-tag-cloud'>|", $found );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertRegExp( "|^<ul class='wp-tag-cloud' role='list'>|", $found );
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->assertRegExp( "|</ul>\n|", $found );
</span><span class="cx" style="display: block; padding: 0 10px">                $this->assertContains( '>' . $tags[0]->name . '<', $found );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -164,7 +164,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'format'     => 'list',
</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">-                $this->assertRegExp( "|^<ul class='wp-tag-cloud'>|", $found );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertRegExp( "|^<ul class='wp-tag-cloud' role='list'>|", $found );
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->assertRegExp( "|</ul>\n|", $found );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ( $tags as $tag ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -198,8 +198,8 @@
</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">-                $this->assertContains( "title='Term has 1 post'", $actual[0] );
-               $this->assertContains( "title='Term has 2 posts'", $actual[1] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertContains( 'aria-label="' . $term_objects[0]->name . ' (Term has 1 post)"', $actual[0] );
+               $this->assertContains( 'aria-label="' . $term_objects[1]->name . ' (Term has 2 posts)"', $actual[1] );
</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">        public function test_topic_count_text_callback() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -223,8 +223,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'topic_count_text_callback' => array( $this, 'topic_count_text_callback' ),
</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">-                $this->assertContains( "title='1 foo'", $actual[0] );
-               $this->assertContains( "title='2 foo'", $actual[1] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertContains( 'aria-label="' . $term_objects[0]->name . ' (1 foo)"', $actual[0] );
+               $this->assertContains( 'aria-label="' . $term_objects[1]->name . ' (2 foo)"', $actual[1] );
</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></pre>
</div>
</div>

</body>
</html>