2018-06-28 04:30:15 +02:00
|
|
|
/**
|
|
|
|
* @output wp-includes/js/wp-emoji-loader.js
|
|
|
|
*/
|
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
/**
|
|
|
|
* Emoji Settings as exported in PHP via _print_emoji_detection_script().
|
|
|
|
* @typedef WPEmojiSettings
|
|
|
|
* @type {object}
|
|
|
|
* @property {?object} source
|
|
|
|
* @property {?string} source.concatemoji
|
|
|
|
* @property {?string} source.twemoji
|
|
|
|
* @property {?string} source.wpemoji
|
|
|
|
* @property {?boolean} DOMReady
|
|
|
|
* @property {?Function} readyCallback
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Support tests.
|
|
|
|
* @typedef SupportTests
|
|
|
|
* @type {object}
|
|
|
|
* @property {?boolean} flag
|
|
|
|
* @property {?boolean} emoji
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* IIFE to detect emoji support and load Twemoji if needed.
|
|
|
|
*
|
|
|
|
* @param {Window} window
|
|
|
|
* @param {Document} document
|
|
|
|
* @param {WPEmojiSettings} settings
|
|
|
|
*/
|
|
|
|
( function wpEmojiLoader( window, document, settings ) {
|
|
|
|
if ( typeof Promise === 'undefined' ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var sessionStorageKey = 'wpEmojiSettingsSupports';
|
|
|
|
var tests = [ 'flag', 'emoji' ];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks whether the browser supports offloading to a Worker.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
|
|
|
*
|
|
|
|
* @private
|
|
|
|
*
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
function supportsWorkerOffloading() {
|
|
|
|
return (
|
|
|
|
typeof Worker !== 'undefined' &&
|
|
|
|
typeof OffscreenCanvas !== 'undefined' &&
|
|
|
|
typeof URL !== 'undefined' &&
|
|
|
|
URL.createObjectURL &&
|
|
|
|
typeof Blob !== 'undefined'
|
|
|
|
);
|
|
|
|
}
|
2015-03-25 00:33:32 +01:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
/**
|
|
|
|
* @typedef SessionSupportTests
|
|
|
|
* @type {object}
|
|
|
|
* @property {number} timestamp
|
|
|
|
* @property {SupportTests} supportTests
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get support tests from session.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
|
|
|
*
|
|
|
|
* @private
|
|
|
|
*
|
|
|
|
* @returns {?SupportTests} Support tests, or null if not set or older than 1 week.
|
|
|
|
*/
|
|
|
|
function getSessionSupportTests() {
|
2023-08-04 02:23:25 +02:00
|
|
|
try {
|
|
|
|
/** @type {SessionSupportTests} */
|
|
|
|
var item = JSON.parse(
|
|
|
|
sessionStorage.getItem( sessionStorageKey )
|
|
|
|
);
|
|
|
|
if (
|
|
|
|
typeof item === 'object' &&
|
|
|
|
typeof item.timestamp === 'number' &&
|
|
|
|
new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds.
|
|
|
|
typeof item.supportTests === 'object'
|
|
|
|
) {
|
|
|
|
return item.supportTests;
|
|
|
|
}
|
|
|
|
} catch ( e ) {}
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Persist the supports in session storage.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
|
|
|
*
|
|
|
|
* @private
|
|
|
|
*
|
|
|
|
* @param {SupportTests} supportTests Support tests.
|
|
|
|
*/
|
|
|
|
function setSessionSupportTests( supportTests ) {
|
2023-08-04 02:23:25 +02:00
|
|
|
try {
|
|
|
|
/** @type {SessionSupportTests} */
|
|
|
|
var item = {
|
|
|
|
supportTests: supportTests,
|
|
|
|
timestamp: new Date().valueOf()
|
|
|
|
};
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
|
2023-08-04 02:23:25 +02:00
|
|
|
sessionStorage.setItem(
|
|
|
|
sessionStorageKey,
|
|
|
|
JSON.stringify( item )
|
|
|
|
);
|
|
|
|
} catch ( e ) {}
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
}
|
2016-10-23 02:00:34 +02:00
|
|
|
|
2017-10-02 06:00:48 +02:00
|
|
|
/**
|
2018-05-03 17:09:21 +02:00
|
|
|
* Checks if two sets of Emoji characters render the same visually.
|
|
|
|
*
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
|
|
|
|
* scope. Everything must be passed by parameters.
|
|
|
|
*
|
2018-05-03 17:09:21 +02:00
|
|
|
* @since 4.9.0
|
|
|
|
*
|
|
|
|
* @private
|
|
|
|
*
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
* @param {CanvasRenderingContext2D} context 2D Context.
|
2023-02-06 22:38:15 +01:00
|
|
|
* @param {string} set1 Set of Emoji to test.
|
|
|
|
* @param {string} set2 Set of Emoji to test.
|
2017-10-02 06:00:48 +02:00
|
|
|
*
|
2018-05-03 17:09:21 +02:00
|
|
|
* @return {boolean} True if the two sets render the same.
|
2017-10-02 06:00:48 +02:00
|
|
|
*/
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
function emojiSetsRenderIdentically( context, set1, set2 ) {
|
2017-10-02 06:00:48 +02:00
|
|
|
// Cleanup from previous test.
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
|
2023-02-06 22:38:15 +01:00
|
|
|
context.fillText( set1, 0, 0 );
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var rendered1 = new Uint32Array(
|
|
|
|
context.getImageData(
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
context.canvas.width,
|
|
|
|
context.canvas.height
|
|
|
|
).data
|
|
|
|
);
|
2017-10-02 06:00:48 +02:00
|
|
|
|
|
|
|
// Cleanup from previous test.
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
|
2023-02-06 22:38:15 +01:00
|
|
|
context.fillText( set2, 0, 0 );
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var rendered2 = new Uint32Array(
|
|
|
|
context.getImageData(
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
context.canvas.width,
|
|
|
|
context.canvas.height
|
|
|
|
).data
|
|
|
|
);
|
2017-10-02 06:00:48 +02:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
return rendered1.every( function ( rendered2Data, index ) {
|
|
|
|
return rendered2Data === rendered2[ index ];
|
|
|
|
} );
|
2017-10-02 06:00:48 +02:00
|
|
|
}
|
|
|
|
|
2015-03-25 00:33:32 +01:00
|
|
|
/**
|
2023-02-06 22:38:15 +01:00
|
|
|
* Determines if the browser properly renders Emoji that Twemoji can supplement.
|
2015-03-25 00:33:32 +01:00
|
|
|
*
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
|
|
|
|
* scope. Everything must be passed by parameters.
|
|
|
|
*
|
2015-03-25 00:33:32 +01:00
|
|
|
* @since 4.2.0
|
|
|
|
*
|
2018-05-03 17:09:21 +02:00
|
|
|
* @private
|
|
|
|
*
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
* @param {CanvasRenderingContext2D} context 2D Context.
|
2018-05-03 17:09:21 +02:00
|
|
|
* @param {string} type Whether to test for support of "flag" or "emoji".
|
2023-06-28 19:26:26 +02:00
|
|
|
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
|
2018-05-03 17:09:21 +02:00
|
|
|
*
|
|
|
|
* @return {boolean} True if the browser can render emoji, false if it cannot.
|
2015-03-25 00:33:32 +01:00
|
|
|
*/
|
2023-06-28 19:26:26 +02:00
|
|
|
function browserSupportsEmoji( context, type, emojiSetsRenderIdentically ) {
|
2017-10-02 06:00:48 +02:00
|
|
|
var isIdentical;
|
2015-03-25 00:33:32 +01:00
|
|
|
|
2016-03-03 06:17:26 +01:00
|
|
|
switch ( type ) {
|
|
|
|
case 'flag':
|
|
|
|
/*
|
2023-02-06 22:38:15 +01:00
|
|
|
* Test for Transgender flag compatibility. Added in Unicode 13.
|
2019-08-08 06:05:55 +02:00
|
|
|
*
|
|
|
|
* 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 + transgender symbol).
|
|
|
|
*/
|
|
|
|
isIdentical = emojiSetsRenderIdentically(
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context,
|
2023-02-06 22:38:15 +01:00
|
|
|
'\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
'\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space
|
2019-08-08 06:05:55 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
if ( isIdentical ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2017-05-08 07:04:52 +02:00
|
|
|
* Test for UN flag compatibility. This is the least supported of the letter locale flags,
|
|
|
|
* so gives us an easy test for full support.
|
2016-03-03 06:17:26 +01:00
|
|
|
*
|
2017-05-08 07:04:52 +02:00
|
|
|
* 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]).
|
2016-03-03 06:17:26 +01:00
|
|
|
*/
|
2017-10-02 06:00:48 +02:00
|
|
|
isIdentical = emojiSetsRenderIdentically(
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context,
|
|
|
|
'\uD83C\uDDFA\uD83C\uDDF3', // as the sequence of two code points
|
|
|
|
'\uD83C\uDDFA\u200B\uD83C\uDDF3' // as the two code points separated by a zero-width space
|
2017-10-02 06:00:48 +02:00
|
|
|
);
|
2016-08-04 22:51:31 +02:00
|
|
|
|
2017-10-02 06:00:48 +02:00
|
|
|
if ( isIdentical ) {
|
2017-05-08 07:04:52 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2016-08-04 22:51:31 +02:00
|
|
|
/*
|
2017-05-25 09:18:45 +02:00
|
|
|
* Test for English flag compatibility. England is a country in the United Kingdom, it
|
2023-02-06 22:38:15 +01:00
|
|
|
* does not have a two letter locale code but rather a five letter sub-division code.
|
2016-08-04 22:51:31 +02:00
|
|
|
*
|
|
|
|
* To test for support, we try to render it, and compare the rendering to how it would look if
|
2017-05-25 09:18:45 +02:00
|
|
|
* the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]).
|
2016-08-04 22:51:31 +02:00
|
|
|
*/
|
2017-10-02 06:00:48 +02:00
|
|
|
isIdentical = emojiSetsRenderIdentically(
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context,
|
2023-02-06 22:38:15 +01:00
|
|
|
// as the flag sequence
|
|
|
|
'\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F',
|
|
|
|
// with each code point separated by a zero-width space
|
|
|
|
'\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F'
|
2017-10-02 06:00:48 +02:00
|
|
|
);
|
2016-08-04 22:51:31 +02:00
|
|
|
|
2017-10-02 06:00:48 +02:00
|
|
|
return ! isIdentical;
|
|
|
|
case 'emoji':
|
2017-05-11 06:26:41 +02:00
|
|
|
/*
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
* Four and twenty blackbirds baked in a pie.
|
2017-05-11 06:26:41 +02:00
|
|
|
*
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
* To test for Emoji 15.0 support, try to render a new emoji: Blackbird.
|
2020-06-15 20:04:26 +02:00
|
|
|
*
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
* The Blackbird is a ZWJ sequence combining 🐦 Bird and ⬛ large black square.,
|
2020-06-15 20:04:26 +02:00
|
|
|
*
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
* 0x1F426 (\uD83D\uDC26) == Bird
|
2022-04-12 07:56:23 +02:00
|
|
|
* 0x200D == Zero-Width Joiner (ZWJ) that links the code points for the new emoji or
|
2020-06-15 20:04:26 +02:00
|
|
|
* 0x200B == Zero-Width Space (ZWS) that is rendered for clients not supporting the new emoji.
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
* 0x2B1B == Large Black Square
|
2019-04-08 07:22:51 +02:00
|
|
|
*
|
|
|
|
* When updating this test for future Emoji releases, ensure that individual emoji that make up the
|
|
|
|
* sequence come from older emoji standards.
|
2016-10-04 05:24:30 +02:00
|
|
|
*/
|
2017-10-02 06:00:48 +02:00
|
|
|
isIdentical = emojiSetsRenderIdentically(
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
context,
|
Emoji: Replace `twitter/twemoji` with `jdecked/twemoji`.
After a chaotic change of ownership, the `twitter/twemoji` library is now considered abandoned.
After waiting for this moment to arise, a fork was created by several former employees who had maintained the library which lives at `jdecked/twemoji` on GitHub.
This switches out where the underlying source code comes from for the library, and applies the 15.0.3 update, which adheres to the Unicode 15 spec and adds support for all Emoji introduced in Emoji 15.0.
This does not update the underlying `precommit:emoji` Grunt script responsible for updating `formatting.php`. After GitHub recently sunset support for SVN, the current process needs to be replaced with a new one. This will be handled in #60520.
Let the masses rejoice for the 🐦⬛ singing in the dead of night, secure 🛜, aromatic 🫚, and some very silly 🪿🪿.
RIP Twemoji. Long live Twemoji!
Props peterwilsoncc, kraftbj, jeffpaul, azaozz, dd32, hareesh-pillai, jorbin.
Fixes #57600.
Built from https://develop.svn.wordpress.org/trunk@57626
git-svn-id: http://core.svn.wordpress.org/trunk@57127 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-13 15:36:07 +01:00
|
|
|
'\uD83D\uDC26\u200D\u2B1B', // as the zero-width joiner sequence
|
|
|
|
'\uD83D\uDC26\u200B\u2B1B' // separated by a zero-width space
|
2017-10-02 06:00:48 +02:00
|
|
|
);
|
2018-06-28 04:42:55 +02:00
|
|
|
|
2017-10-02 06:00:48 +02:00
|
|
|
return ! isIdentical;
|
2015-03-25 00:33:32 +01:00
|
|
|
}
|
2016-03-03 06:17:26 +01:00
|
|
|
|
|
|
|
return false;
|
2015-03-25 00:33:32 +01:00
|
|
|
}
|
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
/**
|
|
|
|
* Checks emoji support tests.
|
|
|
|
*
|
|
|
|
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
|
|
|
|
* scope. Everything must be passed by parameters.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
|
|
|
*
|
|
|
|
* @private
|
|
|
|
*
|
|
|
|
* @param {string[]} tests Tests.
|
2023-06-28 19:26:26 +02:00
|
|
|
* @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification.
|
|
|
|
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
*
|
|
|
|
* @return {SupportTests} Support tests.
|
|
|
|
*/
|
2023-06-28 19:26:26 +02:00
|
|
|
function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically ) {
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var canvas;
|
|
|
|
if (
|
|
|
|
typeof WorkerGlobalScope !== 'undefined' &&
|
|
|
|
self instanceof WorkerGlobalScope
|
|
|
|
) {
|
|
|
|
canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement.
|
|
|
|
} else {
|
|
|
|
canvas = document.createElement( 'canvas' );
|
|
|
|
}
|
|
|
|
|
|
|
|
var context = canvas.getContext( '2d', { willReadFrequently: true } );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Chrome on OS X added native emoji rendering in M41. Unfortunately,
|
|
|
|
* it doesn't work when the font is bolder than 500 weight. So, we
|
|
|
|
* check for bold rendering support to avoid invisible emoji in Chrome.
|
|
|
|
*/
|
|
|
|
context.textBaseline = 'top';
|
|
|
|
context.font = '600 32px Arial';
|
|
|
|
|
|
|
|
var supports = {};
|
|
|
|
tests.forEach( function ( test ) {
|
2023-06-28 19:26:26 +02:00
|
|
|
supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically );
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
} );
|
|
|
|
return supports;
|
|
|
|
}
|
|
|
|
|
2018-05-03 17:09:21 +02:00
|
|
|
/**
|
|
|
|
* Adds a script to the head of the document.
|
|
|
|
*
|
|
|
|
* @ignore
|
|
|
|
*
|
|
|
|
* @since 4.2.0
|
|
|
|
*
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
* @param {string} src The url where the script is located.
|
|
|
|
*
|
2018-05-03 17:09:21 +02:00
|
|
|
* @return {void}
|
|
|
|
*/
|
2015-03-25 00:33:32 +01:00
|
|
|
function addScript( src ) {
|
|
|
|
var script = document.createElement( 'script' );
|
|
|
|
script.src = src;
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
script.defer = true;
|
|
|
|
document.head.appendChild( script );
|
2015-03-25 00:33:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
settings.supports = {
|
2016-03-17 06:00:28 +01:00
|
|
|
everything: true,
|
|
|
|
everythingExceptFlag: true
|
2015-03-25 00:33:32 +01:00
|
|
|
};
|
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
// Create a promise for DOMContentLoaded since the worker logic may finish after the event has fired.
|
|
|
|
var domReadyPromise = new Promise( function ( resolve ) {
|
|
|
|
document.addEventListener( 'DOMContentLoaded', resolve, {
|
|
|
|
once: true
|
|
|
|
} );
|
|
|
|
} );
|
2016-03-03 06:17:26 +01:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
// Obtain the emoji support from the browser, asynchronously when possible.
|
|
|
|
new Promise( function ( resolve ) {
|
|
|
|
var supportTests = getSessionSupportTests();
|
|
|
|
if ( supportTests ) {
|
|
|
|
resolve( supportTests );
|
|
|
|
return;
|
2016-03-03 06:17:26 +01:00
|
|
|
}
|
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
if ( supportsWorkerOffloading() ) {
|
|
|
|
try {
|
2023-06-28 19:26:26 +02:00
|
|
|
// Note that the functions are being passed as arguments due to minification.
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var workerScript =
|
2023-06-28 19:26:26 +02:00
|
|
|
'postMessage(' +
|
|
|
|
testEmojiSupports.toString() +
|
|
|
|
'(' +
|
|
|
|
[
|
|
|
|
JSON.stringify( tests ),
|
|
|
|
browserSupportsEmoji.toString(),
|
|
|
|
emojiSetsRenderIdentically.toString()
|
|
|
|
].join( ',' ) +
|
|
|
|
'));';
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var blob = new Blob( [ workerScript ], {
|
|
|
|
type: 'text/javascript'
|
|
|
|
} );
|
2023-06-30 22:51:28 +02:00
|
|
|
var worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } );
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
worker.onmessage = function ( event ) {
|
|
|
|
supportTests = event.data;
|
|
|
|
setSessionSupportTests( supportTests );
|
2023-06-30 22:51:28 +02:00
|
|
|
worker.terminate();
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
resolve( supportTests );
|
|
|
|
};
|
|
|
|
return;
|
|
|
|
} catch ( e ) {}
|
|
|
|
}
|
2016-03-03 06:17:26 +01:00
|
|
|
|
2023-06-28 19:26:26 +02:00
|
|
|
supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically );
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
setSessionSupportTests( supportTests );
|
|
|
|
resolve( supportTests );
|
|
|
|
} )
|
|
|
|
// Once the browser emoji support has been obtained from the session, finalize the settings.
|
|
|
|
.then( function ( supportTests ) {
|
|
|
|
/*
|
|
|
|
* Tests the browser support for flag emojis and other emojis, and adjusts the
|
|
|
|
* support settings accordingly.
|
|
|
|
*/
|
|
|
|
for ( var test in supportTests ) {
|
|
|
|
settings.supports[ test ] = supportTests[ test ];
|
2015-05-03 20:45:29 +02:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
settings.supports.everything =
|
|
|
|
settings.supports.everything && settings.supports[ test ];
|
2015-05-03 20:45:29 +02:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
if ( 'flag' !== test ) {
|
|
|
|
settings.supports.everythingExceptFlag =
|
|
|
|
settings.supports.everythingExceptFlag &&
|
|
|
|
settings.supports[ test ];
|
2015-05-03 20:45:29 +02:00
|
|
|
}
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
}
|
2015-05-03 20:45:29 +02:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
settings.supports.everythingExceptFlag =
|
|
|
|
settings.supports.everythingExceptFlag &&
|
|
|
|
! settings.supports.flag;
|
2015-03-25 00:33:32 +01:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
// Sets DOMReady to false and assigns a ready function to settings.
|
|
|
|
settings.DOMReady = false;
|
|
|
|
settings.readyCallback = function () {
|
|
|
|
settings.DOMReady = true;
|
|
|
|
};
|
|
|
|
} )
|
|
|
|
.then( function () {
|
|
|
|
return domReadyPromise;
|
|
|
|
} )
|
|
|
|
.then( function () {
|
|
|
|
// When the browser can not render everything we need to load a polyfill.
|
|
|
|
if ( ! settings.supports.everything ) {
|
|
|
|
settings.readyCallback();
|
2015-03-25 00:33:32 +01:00
|
|
|
|
Emoji: Optimize emoji loader with `sessionStorage`, `willReadFrequently`, and `OffscreenCanvas`.
* Use `sessionStorage` to remember the previous results of calls to `browserSupportsEmoji()` for 1 week.
* Optimize reading from canvas by supplying the `willReadFrequently` option for the 2D context.
* When `OffscreenCanvas` is available, offload `browserSupportsEmoji()` to a web worker to prevent blocking the main thread. This is of primary benefit to Safari which does not yet support `willReadFrequently`.
* Remove obsolete support for IE11 since promises are now utilized. Nevertheless, ES3 syntax is maintained and IE11 will simply short-circuit.
Props westonruter, dmsnell, peterwilsoncc, valterlorran, flixos90, spacedmonkey, joemcgill.
Fixes #58472.
Built from https://develop.svn.wordpress.org/trunk@56074
git-svn-id: http://core.svn.wordpress.org/trunk@55586 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-06-27 19:24:25 +02:00
|
|
|
var src = settings.source || {};
|
|
|
|
|
|
|
|
if ( src.concatemoji ) {
|
|
|
|
addScript( src.concatemoji );
|
|
|
|
} else if ( src.wpemoji && src.twemoji ) {
|
|
|
|
addScript( src.twemoji );
|
|
|
|
addScript( src.wpemoji );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} );
|
2015-03-25 00:33:32 +01:00
|
|
|
} )( window, document, window._wpemojiSettings );
|