<!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>[40582] trunk/src/wp-includes/js/wp-emoji-loader.js: Emoji: Make the UN flag test more accurate.</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/40582">40582</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/40582","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>pento</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-05-08 05:00:29 +0000 (Mon, 08 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'>Emoji: Make the UN flag test more accurate.

Previously, the UN flag test relied on the image being produced to be quite small. Unfortunately, the Chrome PNG encoder seems to have changed recently, and it now produces a relatively large image.

For a better test, we can compare the rendering of [U] + [N] against [U] + zero width space + [N].

Fixes <a href="https://core.trac.wordpress.org/ticket/40616">#40616</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesjswpemojiloaderjs">trunk/src/wp-includes/js/wp-emoji-loader.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesjswpemojiloaderjs"></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/js/wp-emoji-loader.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/wp-emoji-loader.js       2017-05-07 17:41:24 UTC (rev 40581)
+++ trunk/src/wp-includes/js/wp-emoji-loader.js 2017-05-08 05:00:29 UTC (rev 40582)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39,21 +39,25 @@
</span><span class="cx" style="display: block; padding: 0 10px">                switch ( type ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case 'flag':
</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 works because the image will be one of three things:
-                                * - Two empty squares, if the browser doesn't render emoji
-                                * - Two squares with 'U' and 'N' in them, if the browser doesn't render flag emoji
-                                * - The United Nations flag
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                          * Test for UN flag compatibility. This is the least supported of the letter locale flags,
+                                * so gives us an easy test for full support.
</ins><span class="cx" style="display: block; padding: 0 10px">                                  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                 * The first two will encode to small images (1-2KB data URLs), the third will encode
-                                * to a larger image (4-5KB data URL).
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                          * To test for support, we try to render it, and compare the rendering to how it would look if
+                                * the browser doesn't render it correctly ([U] + [N]).
</ins><span class="cx" style="display: block; padding: 0 10px">                                  */
</span><span class="cx" style="display: block; padding: 0 10px">                                context.fillText( stringFromCharCode( 55356, 56826, 55356, 56819 ), 0, 0 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( canvas.toDataURL().length < 3000 ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         flag = canvas.toDataURL();
+
+                               context.clearRect( 0, 0, canvas.width, canvas.height );
+
+                               // Add a zero width space between the characters, to force rendering as characters.
+                               context.fillText( stringFromCharCode( 55356, 57331, 8203, 55356, 57096 ), 0, 0 );
+                               flag2 = canvas.toDataURL();
+
+                               if ( flag !== flag2 ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         return false;
</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">-                                context.clearRect( 0, 0, canvas.width, canvas.height );
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 /*
</span><span class="cx" style="display: block; padding: 0 10px">                                 * Test for rainbow flag compatibility. As the rainbow flag was added out of sequence with
</span><span class="cx" style="display: block; padding: 0 10px">                                 * the usual Unicode release cycle, some browsers support it, and some don't, even if their
</span></span></pre>
</div>
</div>

</body>
</html>