WordPress/wp-admin
hellofromTonya 8c4c35311b Introduce font-face styles generator and printer.
Introducing Font Face, a server-side `@font-face` styles generator and printer. 

tl;dr:
* Introduces Font Face.
* Deprecates `_wp_theme_json_webfonts_handler()`.

**Introduce Font Face**

From an array of fonts (i.e. each font-family and its font variations to be processed), it:

1. Validates each `font-face` declaration, i.e. the CSS property and value pairing. If validation fails, processing stops with no font-face styles printed.
3. Generates the `@font-face` CSS for each font-family.
4. Prints the CSS within a `<style id="wp-fonts-local">` element.

The entry point into Font Face is through a new global function called `wp_print_font_faces()`, which is automatically called:

* when the `'wp_head'` hook runs (for the front-end).
* when the `'admin_print_styles'` hook runs (for the back-end).
* when `_wp_get_iframed_editor_assets()` runs to inject the `@font-face` styles into the iframed editor.

Once called, it gets the fonts from Theme_JSON merged data layer, which includes theme defined fonts and user activated fonts (once the Font Library #59166 is introduced into Core).

For classic sites, themes and plugins can directly call `wp_print_font_faces()` and pass their fonts array to it for processing.

**Deprecates `_wp_theme_json_webfonts_handler()`.**

As Font Face is a direct replacement, the stopgap code in `_wp_theme_json_webfonts_handler()` (introduced in 6.0.0 via [53282]) is deprecated and unused in Core.

**Props note:**
There's a long multiple year history baked into Font Face, which dates back to the early versions of a web font API (see #46370 and [https://github.com/WordPress/gutenberg/issues/41479 roadmap]. The props list includes those who contributed from those early versions up to this commit.

**References:**
* #46370 original (Web)Fonts API proposal for registering and enqueuing web fonts.
* [https://github.com/WordPress/gutenberg/issues/41479 Gutenberg tracking issue] which includes the evolution from Webfonts API to Fonts API to Font Face.
* [53282] / #55567 Added the stopgap code `_wp_theme_json_webfonts_handler()` in 6.0.
* [https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face @font-face on mdn web docs]
* #59166 Font Library: Font manager for WordPress

Follow-up to [53282].

Props aristath, jonoaldersonwp, hellofromTonya, andraganescu, annezazu, antonvlasenko, arena, askdesign, azaozz, bph, bradley2083, colorful-tones, costdev, davidbaumwald, desrosj, dingo_d, djcowan, domainsupport, dryanpress, elmastudio, flixos90, francina, garrett-eclipse, gigitux, grantmkin, grapplerulrich, gziolo, ironprogrammer, jb510, jeffpaul, jeremyyip, jffng, joostdevalk, jorgefilipecosta, juanmaguitar, mamaduka, matveb, mburridge, mitogh, ndiego, ntsekouras, oandregal, ocean90, oglekler, paaljoachim, pagelab, peterwilsoncc, poena, priethor, scruffian, SergeyBiryukov, shiloey, simison, skorasaurus, soean, westonruter, wildworks, zaguiini.
Fixes #59165.
Built from https://develop.svn.wordpress.org/trunk@56500


git-svn-id: http://core.svn.wordpress.org/trunk@56012 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-08-31 21:49:20 +00:00
..
css General: Use regular core button styles for page header actions. 2023-08-24 20:16:18 +00:00
images Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
includes Introduce font-face styles generator and printer. 2023-08-31 21:49:20 +00:00
js External Libraries: Update deprecated jQuery code in Farbtastic lib. 2023-07-17 22:03:26 +00:00
maint
network Administration: Apply admin notice functions in multisite. 2023-08-17 21:03:19 +00:00
user
about.php Help/About: Add images to About page, match header style to images. 2023-08-01 15:04:22 +00:00
admin-ajax.php
admin-footer.php
admin-functions.php
admin-header.php
admin-post.php
admin.php
async-upload.php
authorize-application.php
comment.php
contribute.php Help/About: Escape "Contribute" links, for better consistency. 2023-08-01 12:58:22 +00:00
credits.php Help/About: Escape "Contribute" links, for better consistency. 2023-08-01 12:58:22 +00:00
custom-background.php
custom-header.php
customize.php
edit-comments.php
edit-form-advanced.php
edit-form-blocks.php Editor: Fix layout of no-js state in site editor. 2023-07-10 21:22:21 +00:00
edit-form-comment.php
edit-link-form.php
edit-tag-form.php
edit-tags.php
edit.php Help/About: Match icon and text in Help for bulk edit button. 2023-08-24 20:27:12 +00:00
erase-personal-data.php
export-personal-data.php
export.php
freedoms.php Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
import.php
index.php
install-helper.php
install.php Upgrade/Install: Add aria-describedby for input descriptions. 2023-06-25 18:44:23 +00:00
link-add.php
link-manager.php
link-parse-opml.php
link.php
load-scripts.php
load-styles.php Database: Replace str_contains() and str_ends_with() usage in wpdb methods. 2023-06-23 12:17:24 +00:00
media-new.php
media-upload.php
media.php
menu-header.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:56:23 +00:00
menu.php Editor: Fix conditionals in Template Editing Mode. 2023-07-25 14:33:23 +00:00
moderation.php
ms-admin.php
ms-delete-site.php
ms-edit.php
ms-options.php
ms-sites.php
ms-themes.php
ms-upgrade-network.php
ms-users.php
my-sites.php Administration: Apply admin notice functions in multisite. 2023-08-17 21:03:19 +00:00
nav-menus.php Menus: Fix proximity of controls to Save and Delete menus. 2023-08-24 15:59:12 +00:00
network.php
options-discussion.php
options-general.php I18n: Move translator comments inside sprintf for tagline field description. 2023-07-11 05:55:20 +00:00
options-head.php
options-media.php
options-permalink.php
options-privacy.php
options-reading.php
options-writing.php
options.php
plugin-editor.php Code Modernization: Use str_ends_with() in a few more places. 2023-06-24 09:52:19 +00:00
plugin-install.php
plugins.php
post-new.php
post.php
press-this.php
privacy-policy-guide.php
privacy.php Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
profile.php
revision.php Revisions: Add missing escaping function for $post_edit_link in wp-admin/revision.php. 2023-08-24 09:32:21 +00:00
setup-config.php Upgrade/Install: Show/hide toggle on password fields. 2023-06-23 23:09:29 +00:00
site-editor.php Editor: Fix conditionals in Template Editing Mode. 2023-07-25 14:33:23 +00:00
site-health-info.php
site-health.php
term.php
theme-editor.php Code Modernization: Use str_ends_with() in a few more places. 2023-06-24 09:52:19 +00:00
theme-install.php
themes.php General: add block theme previews. 2023-06-27 09:36:21 +00:00
tools.php
update-core.php Menus: Revert unintentional changes in [56449]. 2023-08-24 16:14:18 +00:00
update.php
upgrade-functions.php
upgrade.php Upgrade/Install: Add missing escaping function for get_option( 'home' ) in upgrade.php. 2023-08-25 05:44:16 +00:00
upload.php
user-edit.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:56:23 +00:00
user-new.php Upgrade/Install: Show/hide toggle on password fields. 2023-06-23 23:09:29 +00:00
users.php
widgets-form-blocks.php
widgets-form.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
widgets.php