Emoji: Update the Twemoji loader to include the rainbow flag.
[38179] added support for the rainbow flag to core, but platform compatibility is a bit strange, because the flag was defined out of sync with the usual Unicode release cycle. For example Android N supports all Unicode 9.0 emoji, but doesn't support the rainbow flag thus the rainbow flag isn't rendered. The Twemoji loader already has an exception for flags - it'll load if the browser supports everything but flags, and then only replace flag emoji, leaving everything else as native rendering. To provide a seamless experience for all flags the loader now uses the rainbow flag to test flag support. Props pento. See #37543. Fixes #37566. git-svn-id: https://develop.svn.wordpress.org/trunk@38194 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
7f106c4f8b
commit
dea0ca7dbc
@ -14,7 +14,7 @@
|
||||
var canvas = document.createElement( 'canvas' ),
|
||||
context = canvas.getContext && canvas.getContext( '2d' ),
|
||||
stringFromCharCode = String.fromCharCode,
|
||||
tonedata, tone, tone2;
|
||||
flag, flag2, tonedata, tone, tone2;
|
||||
|
||||
if ( ! context || ! context.fillText ) {
|
||||
return false;
|
||||
@ -40,7 +40,29 @@
|
||||
* to a larger image (4-5KB data URL).
|
||||
*/
|
||||
context.fillText( stringFromCharCode( 55356, 56806, 55356, 56826 ), 0, 0 );
|
||||
return canvas.toDataURL().length > 3000;
|
||||
if ( canvas.toDataURL().length < 3000 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
context.clearRect( 0, 0, canvas.width, canvas.height );
|
||||
|
||||
/*
|
||||
* Test for rainbow flag compatibility. As the rainbow flag was added out of sequence with
|
||||
* the usual Unicode release cycle, some browsers support it, and some don't, even if their
|
||||
* Unicode support is up to date.
|
||||
*
|
||||
* 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 (white flag emoji + rainbow emoji).
|
||||
*/
|
||||
context.fillText( stringFromCharCode( 55356, 57331, 65039, 8205, 55356, 57096 ), 0, 0 );
|
||||
flag = canvas.toDataURL();
|
||||
|
||||
context.clearRect( 0, 0, canvas.width, canvas.height );
|
||||
|
||||
context.fillText( stringFromCharCode( 55356, 57331, 55356, 57096 ), 0, 0 );
|
||||
flag2 = canvas.toDataURL();
|
||||
|
||||
return flag !== flag2;
|
||||
case 'diversity':
|
||||
/*
|
||||
* This tests if the browser supports the Emoji Diversity specification, by rendering an
|
||||
|
@ -134,7 +134,7 @@
|
||||
function test( text ) {
|
||||
// Single char. U+20E3 to detect keycaps. U+00A9 "copyright sign" and U+00AE "registered sign" not included.
|
||||
var single = /[\u203C\u2049\u20E3\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2300\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692\u2693\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753\u2754\u2755\u2757\u2763\u2764\u2795\u2796\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]/,
|
||||
// Surrogate pair range. Only tests for the second half.
|
||||
// Surrogate pair range. Only tests for the second half.
|
||||
pair = /[\uDC00-\uDFFF]/;
|
||||
|
||||
if ( text ) {
|
||||
@ -180,8 +180,10 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( settings.supports.everythingExceptFlag && ! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) ) {
|
||||
|
||||
if ( settings.supports.everythingExceptFlag &&
|
||||
! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) && // Country flags
|
||||
! /^(1f3f3-fe0f-200d-1f308|1f3f4-200d-2620-fe0f)$/.test( icon ) // Rainbow and pirate flags
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user