<!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>[52069] trunk: Add Site Editor and PHP changes from Gutenberg 10.1 - 11.9</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 { white-space: pre-line; 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/52069">52069</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/52069","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>noisysocks</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2021-11-09 02:15:23 +0000 (Tue, 09 Nov 2021)</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'>Add Site Editor and PHP changes from Gutenberg 10.1 - 11.9
- First pass at adding the site editor from the Gutenberg plugin to
wp-admin/site-editor.php.
- Adds miscellaneous PHP changes from Gutenberg 10.1 - 11.9.
Follows <a href="https://core.trac.wordpress.org/changeset/52042">[52042]</a>.
See <a href="https://core.trac.wordpress.org/ticket/54337">#54337</a>.
Props youknowriad, aristath, hellofromtonya, gziolo.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkpackagelockjson">trunk/package-lock.json</a></li>
<li><a href="#trunkpackagejson">trunk/package.json</a></li>
<li><a href="#trunksrcwpadminmenuphp">trunk/src/wp-admin/menu.php</a></li>
<li><a href="#trunksrcwpincludesassetsscriptloaderpackagesphp">trunk/src/wp-includes/assets/script-loader-packages.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerymediumpostsphp">trunk/src/wp-includes/block-patterns/query-medium-posts.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerysmallpostsphp">trunk/src/wp-includes/block-patterns/query-small-posts.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerystandardpostsphp">trunk/src/wp-includes/block-patterns/query-standard-posts.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsborderphp">trunk/src/wp-includes/block-supports/border.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportscolorsphp">trunk/src/wp-includes/block-supports/colors.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsduotonephp">trunk/src/wp-includes/block-supports/duotone.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportselementsphp">trunk/src/wp-includes/block-supports/elements.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportslayoutphp">trunk/src/wp-includes/block-supports/layout.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsspacingphp">trunk/src/wp-includes/block-supports/spacing.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportstypographyphp">trunk/src/wp-includes/block-supports/typography.php</a></li>
<li><a href="#trunksrcwpincludesblocksindexphp">trunk/src/wp-includes/blocks/index.php</a></li>
<li><a href="#trunksrcwpincludesblocksphp">trunk/src/wp-includes/blocks.php</a></li>
<li><a href="#trunksrcwpincludesdefaultfiltersphp">trunk/src/wp-includes/default-filters.php</a></li>
<li><a href="#trunksrcwpincludesksesphp">trunk/src/wp-includes/kses.php</a></li>
<li><a href="#trunksrcwpincludespostphp">trunk/src/wp-includes/post.php</a></li>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestuserscontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php</a></li>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestwidgettypescontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php</a></li>
<li><a href="#trunksrcwpincludesscriptloaderphp">trunk/src/wp-includes/script-loader.php</a></li>
<li><a href="#trunksrcwpincludestemplatecanvasphp">trunk/src/wp-includes/template-canvas.php</a></li>
<li><a href="#trunksrcwpincludesthemephp">trunk/src/wp-includes/theme.php</a></li>
<li><a href="#trunksrcwpsettingsphp">trunk/src/wp-settings.php</a></li>
<li><a href="#trunktestsphpunitincludesfunctionsphp">trunk/tests/phpunit/includes/functions.php</a></li>
<li><a href="#trunktestsphpunittestsblocktemplateutilsphp">trunk/tests/phpunit/tests/block-template-utils.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestschemasetupphp">trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestuserscontrollerphp">trunk/tests/phpunit/tests/rest-api/rest-users-controller.php</a></li>
<li><a href="#trunktestsqunitfixtureswpapigeneratedjs">trunk/tests/qunit/fixtures/wp-api-generated.js</a></li>
<li><a href="#trunktoolswebpackblocksjs">trunk/tools/webpack/blocks.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunksrcwpadminsiteeditorphp">trunk/src/wp-admin/site-editor.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsdimensionsphp">trunk/src/wp-includes/block-supports/dimensions.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation/</li>
<li><a href="#trunksrcwpincludesblocksnavigationblockjson">trunk/src/wp-includes/blocks/navigation/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationviewassetphp">trunk/src/wp-includes/blocks/navigation/view.asset.php</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationviewminassetphp">trunk/src/wp-includes/blocks/navigation/view.min.asset.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-area/</li>
<li><a href="#trunksrcwpincludesblocksnavigationareablockjson">trunk/src/wp-includes/blocks/navigation-area/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationareaphp">trunk/src/wp-includes/blocks/navigation-area.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-link/</li>
<li><a href="#trunksrcwpincludesblocksnavigationlinkblockjson">trunk/src/wp-includes/blocks/navigation-link/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationlinkphp">trunk/src/wp-includes/blocks/navigation-link.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-submenu/</li>
<li><a href="#trunksrcwpincludesblocksnavigationsubmenublockjson">trunk/src/wp-includes/blocks/navigation-submenu/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationsubmenuphp">trunk/src/wp-includes/blocks/navigation-submenu.php</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationphp">trunk/src/wp-includes/blocks/navigation.php</a></li>
<li>trunk/src/wp-includes/blocks/pattern/</li>
<li><a href="#trunksrcwpincludesblockspatternblockjson">trunk/src/wp-includes/blocks/pattern/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspatternphp">trunk/src/wp-includes/blocks/pattern.php</a></li>
<li>trunk/src/wp-includes/blocks/post-author/</li>
<li><a href="#trunksrcwpincludesblockspostauthorblockjson">trunk/src/wp-includes/blocks/post-author/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostauthorphp">trunk/src/wp-includes/blocks/post-author.php</a></li>
<li>trunk/src/wp-includes/blocks/post-comments/</li>
<li><a href="#trunksrcwpincludesblockspostcommentsblockjson">trunk/src/wp-includes/blocks/post-comments/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostcommentsphp">trunk/src/wp-includes/blocks/post-comments.php</a></li>
<li>trunk/src/wp-includes/blocks/post-navigation-link/</li>
<li><a href="#trunksrcwpincludesblockspostnavigationlinkblockjson">trunk/src/wp-includes/blocks/post-navigation-link/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostnavigationlinkphp">trunk/src/wp-includes/blocks/post-navigation-link.php</a></li>
<li>trunk/src/wp-includes/blocks/term-description/</li>
<li><a href="#trunksrcwpincludesblockstermdescriptionblockjson">trunk/src/wp-includes/blocks/term-description/block.json</a></li>
<li><a href="#trunksrcwpincludesblockstermdescriptionphp">trunk/src/wp-includes/blocks/term-description.php</a></li>
<li>trunk/src/wp-includes/blocks/widget-group/</li>
<li><a href="#trunksrcwpincludesblockswidgetgroupblockjson">trunk/src/wp-includes/blocks/widget-group/block.json</a></li>
<li><a href="#trunksrcwpincludesblockswidgetgroupphp">trunk/src/wp-includes/blocks/widget-group.php</a></li>
<li>trunk/tests/phpunit/tests/block-supports/</li>
<li><a href="#trunktestsphpunittestsblocksupportscolorsphp">trunk/tests/phpunit/tests/block-supports/colors.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportselementsphp">trunk/tests/phpunit/tests/block-supports/elements.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportsspacingphp">trunk/tests/phpunit/tests/block-supports/spacing.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportstypographyphp">trunk/tests/phpunit/tests/block-supports/typography.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkpackagelockjson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/package-lock.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/package-lock.json 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/package-lock.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3888,6 +3888,44 @@
</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">+ "@wordpress/edit-site": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-3.0.5.tgz",
+ "integrity": "sha512-FYr6xwZcDaPxiOBsmzHnbaSdGeGD55I2j2flJPtLM4v7jzrIFVOBBaFtGUAUTtl0oagOlVNkQidL+/mVAcbIeQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@wordpress/a11y": "^3.2.3",
+ "@wordpress/api-fetch": "^5.2.5",
+ "@wordpress/block-editor": "^8.0.0",
+ "@wordpress/block-library": "^6.0.3",
+ "@wordpress/blocks": "^11.1.3",
+ "@wordpress/components": "^19.0.1",
+ "@wordpress/compose": "^5.0.5",
+ "@wordpress/core-data": "^4.0.5",
+ "@wordpress/data": "^6.1.3",
+ "@wordpress/data-controls": "^2.2.6",
+ "@wordpress/editor": "^12.0.2",
+ "@wordpress/element": "^4.0.3",
+ "@wordpress/hooks": "^3.2.1",
+ "@wordpress/html-entities": "^3.2.2",
+ "@wordpress/i18n": "^4.2.3",
+ "@wordpress/icons": "^6.1.0",
+ "@wordpress/interface": "^4.1.3",
+ "@wordpress/keyboard-shortcuts": "^3.0.5",
+ "@wordpress/keycodes": "^3.2.3",
+ "@wordpress/media-utils": "^3.0.4",
+ "@wordpress/notices": "^3.2.6",
+ "@wordpress/plugins": "^4.0.5",
+ "@wordpress/primitives": "^3.0.3",
+ "@wordpress/url": "^3.3.0",
+ "classnames": "^2.3.1",
+ "downloadjs": "^1.4.7",
+ "file-saver": "^2.0.2",
+ "jszip": "^3.2.2",
+ "lodash": "^4.17.21",
+ "rememo": "^3.0.0"
+ }
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/edit-widgets": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "3.1.0",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-3.1.0.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7438,7 +7476,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "browserify-aes": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "1.2.0",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
</ins><span class="cx" style="display: block; padding: 0 10px"> "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
</span><span class="cx" style="display: block; padding: 0 10px"> "dev": true,
</span><span class="cx" style="display: block; padding: 0 10px"> "requires": {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10097,6 +10135,11 @@
</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">+ "downloadjs": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz",
+ "integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw="
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "downshift": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "6.1.7",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12061,6 +12104,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "flat-cache": "^3.0.4"
</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">+ "file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "file-sync-cmp": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "0.1.1",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14372,6 +14420,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "ev-emitter": "^1.0.0"
</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">+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "import-fresh": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "3.3.0",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -16924,6 +16977,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "object.assign": "^4.1.2"
</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">+ "jszip": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz",
+ "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==",
+ "requires": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "set-immediate-shim": "~1.0.1"
+ }
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "just-extend": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "4.2.1",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17202,6 +17266,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "type-check": "~0.4.0"
</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">+ "lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "requires": {
+ "immediate": "~3.0.5"
+ }
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "liftup": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "3.0.1",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19837,8 +19909,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "pako": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "1.0.11",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "parallel-transform": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "1.2.0",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22865,6 +22936,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
</span><span class="cx" style="display: block; padding: 0 10px"> "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
</span><span class="cx" style="display: block; padding: 0 10px"> },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "set-value": {
</span><span class="cx" style="display: block; padding: 0 10px"> "version": "2.0.1",
</span><span class="cx" style="display: block; padding: 0 10px"> "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
</span></span></pre></div>
<a id="trunkpackagejson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/package.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/package.json 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/package.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/dom": "3.2.6",
</span><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/dom-ready": "3.2.2",
</span><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/edit-post": "5.0.5",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "@wordpress/edit-site": "3.0.5",
</ins><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/edit-widgets": "3.1.0",
</span><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/editor": "12.0.2",
</span><span class="cx" style="display: block; padding: 0 10px"> "@wordpress/element": "4.0.3",
</span></span></pre></div>
<a id="trunksrcwpadminmenuphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/menu.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/menu.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-admin/menu.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -202,8 +202,24 @@
</span><span class="cx" style="display: block; padding: 0 10px"> /* translators: %s: Number of available theme updates. */
</span><span class="cx" style="display: block; padding: 0 10px"> $submenu['themes.php'][5] = array( sprintf( __( 'Themes %s' ), $count ), $appearance_cap, 'themes.php' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+if ( wp_is_block_template_theme() ) {
+ $submenu['themes.php'][6] = array(
+ sprintf(
+ /* translators: %s: "beta" label */
+ __( 'Editor %s' ),
+ '<span class="awaiting-mod">' . __( 'beta' ) . '</span>'
+ ),
+ 'edit_theme_options',
+ 'site-editor.php',
+ );
+}
+
+// Hide Customize link on block themes unless a plugin or theme is using
+// customize_register to add a setting.
+if ( ! wp_is_block_template_theme() || has_action( 'customize_register' ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> $customize_url = add_query_arg( 'return', urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), 'customize.php' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $submenu['themes.php'][6] = array( __( 'Customize' ), 'customize', esc_url( $customize_url ), '', 'hide-if-no-customize' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $submenu['themes.php'][7] = array( __( 'Customize' ), 'customize', esc_url( $customize_url ), '', 'hide-if-no-customize' );
+}
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $submenu['themes.php'][10] = array( __( 'Menus' ), 'edit_theme_options', 'nav-menus.php' );
</span></span></pre></div>
<a id="trunksrcwpadminsiteeditorphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-admin/site-editor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/site-editor.php (rev 0)
+++ trunk/src/wp-admin/site-editor.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,115 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Site Editor administration screen.
+ *
+ * @package WordPress
+ * @subpackage Administration
+ */
+
+global $post, $editor_styles;
+
+/** WordPress Administration Bootstrap */
+require_once __DIR__ . '/admin.php';
+
+if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_die(
+ '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' .
+ '<p>' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>',
+ 403
+ );
+}
+
+if ( ! wp_is_block_template_theme() ) {
+ wp_die( __( 'The theme you are currently using is not compatible with Full Site Editing.' ) );
+}
+
+// Used in the HTML title tag.
+$title = __( 'Editor (beta)' );
+$parent_file = 'themes.php';
+
+// Flag that we're loading the block editor.
+$current_screen = get_current_screen();
+$current_screen->is_block_editor( true );
+
+$block_editor_context = new WP_Block_Editor_Context();
+
+$active_global_styles_id = WP_Theme_JSON_Resolver::get_user_custom_post_type_id();
+$active_theme = wp_get_theme()->get_stylesheet();
+$preload_paths = array(
+ array( '/wp/v2/media', 'OPTIONS' ),
+ '/',
+ '/wp/v2/types?context=edit',
+ '/wp/v2/taxonomies?context=edit',
+ '/wp/v2/pages?context=edit',
+ '/wp/v2/categories?context=edit',
+ '/wp/v2/posts?context=edit',
+ '/wp/v2/tags?context=edit',
+ '/wp/v2/templates?context=edit',
+ '/wp/v2/template-parts?context=edit',
+ '/wp/v2/settings',
+ '/wp/v2/themes?context=edit&status=active',
+ '/wp/v2/global-styles/' . $active_global_styles_id . '?context=edit',
+ '/wp/v2/global-styles/' . $active_global_styles_id,
+ '/wp/v2/themes/' . $active_theme . '/global-styles',
+);
+block_editor_rest_api_preload( $preload_paths, $block_editor_context );
+
+$editor_settings = get_block_editor_settings(
+ array(
+ 'siteUrl' => site_url(),
+ 'postsPerPage' => get_option( 'posts_per_page' ),
+ 'styles' => get_block_editor_theme_styles(),
+ 'defaultTemplateTypes' => get_default_block_template_types(),
+ 'defaultTemplatePartAreas' => get_allowed_block_template_part_areas(),
+ '__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered(),
+ '__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(),
+ ),
+ $block_editor_context
+);
+
+wp_add_inline_script(
+ 'wp-edit-site',
+ sprintf(
+ 'wp.domReady( function() {
+ wp.editSite.initialize( "site-editor", %s );
+ } );',
+ wp_json_encode( $editor_settings )
+ )
+);
+
+// Preload server-registered block schemas.
+wp_add_inline_script(
+ 'wp-blocks',
+ 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');'
+);
+
+wp_add_inline_script(
+ 'wp-blocks',
+ sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ),
+ 'after'
+);
+
+wp_enqueue_script( 'wp-edit-site' );
+wp_enqueue_script( 'wp-format-library' );
+wp_enqueue_style( 'wp-edit-site' );
+wp_enqueue_style( 'wp-format-library' );
+wp_enqueue_media();
+
+if (
+ current_theme_supports( 'wp-block-styles' ) ||
+ ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 )
+) {
+ wp_enqueue_style( 'wp-block-library-theme' );
+}
+
+/** This action is documented in wp-admin/edit-form-blocks.php */
+do_action( 'enqueue_block_editor_assets' );
+
+require_once ABSPATH . 'wp-admin/admin-header.php';
+?>
+
+<div id="site-editor" class="edit-site"></div>
+
+<?php
+
+require_once ABSPATH . 'wp-admin/admin-footer.php';
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-admin/site-editor.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesassetsscriptloaderpackagesphp"></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/assets/script-loader-packages.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/assets/script-loader-packages.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/assets/script-loader-packages.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<?php return array('a11y.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => '531b91a758b525158d15c140a522819b'), 'annotations.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => '460983ea433ad4adb480359a940d1271'), 'api-fetch.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'e57113647e68a852cb7b1cd8e140bc82'), 'autop.js' => array('dependencies' => array('wp-polyfill'), 'version' => '98ee456bef50e518083b2d908b12efd6'), 'blob.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b8855b04f6a52a7bca89f8d945d46866'), 'block-directory.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-cor
e-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives'), 'version' => 'e3b4864b1761f45559b125d181eeccea'), 'block-editor.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-shortcode', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '078463eccb0f2a6c4b207270e5938454'), 'block-library.js' => array('dependencies' => array('lodash', 'moment', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp
-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport'), 'version' => '0a3e4865c8c2025c841cea5aee3c6e84'), 'block-serialization-default-parser.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cc8e5d0e23cf68bb9944bf2a7a016e52'), 'blocks.js' => array('dependencies' => array('lodash', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-shortcode'), 'version' => '85a08117e58397f5e519e8ee9f1ef820'), 'components.js' => array('dependencies' => array('lodash', 'moment', 'react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', '
wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-warning'), 'version' => '1e5a68c6be5b9cc6532d58a5062c4707'), 'compose.js' => array('dependencies' => array('lodash', 'react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => '68b1701c372843d24a167ee93e21f28f'), 'core-data.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-url'), 'version' => '2df3489e429bffb1891d0d748c7b4b31'), 'customize-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-vie
wport', 'wp-widgets'), 'version' => '61524e8db487c3e60a2b3ce6e5371dbd'), 'data.js' => array('dependencies' => array('lodash', 'react', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-redux-routine'), 'version' => '3fa92a13f4f6644731f73af5ecdbf518'), 'data-controls.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ceef9ce8c9c058d69ebf44db39353687'), 'date.js' => array('dependencies' => array('moment', 'wp-polyfill'), 'version' => '70a2be92e6099f67b996b8a7e0266f5c'), 'deprecated.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '13724e4923d40e224e7c99fdc350a6a1'), 'dom.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '567a844d6765c6c0422c55df898f1681'), 'dom-ready.js' => array('dependencies' => array('wp-polyfill'), 'version' => '1e1b9c1535c1c32d3236d41aa2
7c7bf9'), 'edit-post.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport', 'wp-warning'), 'version' => 'ee6c27d32b67d2c0f22907b72d8762ed'), 'edit-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'b921a96625a3d8c0d1e0d7472df34de8'), 'editor.js' => array('dependencies
' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'c6e02b89186dd132d70191c58a3dec41'), 'element.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => 'ed6d85e269fcb3632c76dec6b9ac02f1'), 'escape-html.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4f03d9c45a01df8191f6833373fe1cfa'), 'format-library.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitiv
es', 'wp-rich-text', 'wp-url'), 'version' => '86f8584fd0845366c326ed2e31326a1e'), 'hooks.js' => array('dependencies' => array('wp-polyfill'), 'version' => '02fd2defc23cb5c2837081df67b97158'), 'html-entities.js' => array('dependencies' => array('wp-polyfill'), 'version' => '140ecb91be91e7eec34220584d085033'), 'i18n.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '48abe0c2523b902e445788bb8132ef7e'), 'is-shallow-equal.js' => array('dependencies' => array('wp-polyfill'), 'version' => '798b660598677b39413fdb5f68624aa8'), 'keyboard-shortcuts.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '03be8557c1d6f9c98d9f2a39b0d45968'), 'keycodes.js' => array('dependencies' => array('lodash', 'wp-i18n', 'wp-polyfill'), 'version' => '34f4da80b9b52d7f35a142592777b29c'), 'list-reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-ap
i-fetch', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '99752f8ee65e66fefce46b8af1dac732'), 'media-utils.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '52a1fb71f5e51adfecbe905eccae04b4'), 'notices.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-polyfill'), 'version' => '0b40907eed64e81bf22bb448c88642d3'), 'nux.js' => array('dependencies' => array('lodash', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '1120e26c43e94121389f5d1c9f6e89b6'), 'plugins.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-polyfill', 'wp-primitives'), 'version' => 'c860421df5601d15a8df4afcbc212304'), 'primitives.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'dc0962ac2885a26
f8c2abdbe0cf0e333'), 'priority-queue.js' => array('dependencies' => array('wp-polyfill'), 'version' => '18c93919f04bb681234310b314675b17'), 'redux-routine.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'c825bcfd263c88dcd76e14b67d47340b'), 'reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => '2d4d45c0e771117074787655ee5efbcb'), 'rich-text.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-compose', 'wp-data', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => '04ed6c49d04854d7ca20cb9d321e5e87'), 'server-side-render.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'w
p-url'), 'version' => '04ce14348d15952b7f9fed3b6e32a745'), 'shortcode.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '15757929bc8d52a3b184c3fcaeb38c64'), 'token-list.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '7bcd3684420783ef1f6ebb7680fe958e'), 'url.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'ef8beff0847cbaa0e337362716c13bea'), 'viewport.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-data', 'wp-element', 'wp-polyfill'), 'version' => 'a4b7cdcc29f09d698255b3aec03ac6c1'), 'warning.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5ebe2df53cf3c74ebffc7e2d3e76184c'), 'widgets.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version'
=> 'd8086829048e496d396102031b6b98f4'), 'wordcount.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '02339c8ad03da1e7a03f9212da004007'));
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('a11y.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => '531b91a758b525158d15c140a522819b'), 'annotations.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => '460983ea433ad4adb480359a940d1271'), 'api-fetch.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'e57113647e68a852cb7b1cd8e140bc82'), 'autop.js' => array('dependencies' => array('wp-polyfill'), 'version' => '98ee456bef50e518083b2d908b12efd6'), 'blob.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b8855b04f6a52a7bca89f8d945d46866'), 'block-directory.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-cor
e-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives'), 'version' => 'e3b4864b1761f45559b125d181eeccea'), 'block-editor.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-shortcode', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '078463eccb0f2a6c4b207270e5938454'), 'block-library.js' => array('dependencies' => array('lodash', 'moment', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp
-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport'), 'version' => '0a3e4865c8c2025c841cea5aee3c6e84'), 'block-serialization-default-parser.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cc8e5d0e23cf68bb9944bf2a7a016e52'), 'blocks.js' => array('dependencies' => array('lodash', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-shortcode'), 'version' => '85a08117e58397f5e519e8ee9f1ef820'), 'components.js' => array('dependencies' => array('lodash', 'moment', 'react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', '
wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-warning'), 'version' => '1e5a68c6be5b9cc6532d58a5062c4707'), 'compose.js' => array('dependencies' => array('lodash', 'react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => '68b1701c372843d24a167ee93e21f28f'), 'core-data.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-url'), 'version' => '2df3489e429bffb1891d0d748c7b4b31'), 'customize-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-vie
wport', 'wp-widgets'), 'version' => '61524e8db487c3e60a2b3ce6e5371dbd'), 'data.js' => array('dependencies' => array('lodash', 'react', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-redux-routine'), 'version' => '3fa92a13f4f6644731f73af5ecdbf518'), 'data-controls.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ceef9ce8c9c058d69ebf44db39353687'), 'date.js' => array('dependencies' => array('moment', 'wp-polyfill'), 'version' => '70a2be92e6099f67b996b8a7e0266f5c'), 'deprecated.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '13724e4923d40e224e7c99fdc350a6a1'), 'dom.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '567a844d6765c6c0422c55df898f1681'), 'dom-ready.js' => array('dependencies' => array('wp-polyfill'), 'version' => '1e1b9c1535c1c32d3236d41aa2
7c7bf9'), 'edit-post.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport', 'wp-warning'), 'version' => 'ee6c27d32b67d2c0f22907b72d8762ed'), 'edit-site.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => '162621f7d189e8e2a1bfe12183f73ece'), 'edit-widgets.js' => array('dependencies' => ar
ray('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'b921a96625a3d8c0d1e0d7472df34de8'), 'editor.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'c6e02b89186dd132d70191c58a3dec41'), 'element.js' => array('d
ependencies' => array('lodash', 'react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => 'ed6d85e269fcb3632c76dec6b9ac02f1'), 'escape-html.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4f03d9c45a01df8191f6833373fe1cfa'), 'format-library.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-url'), 'version' => '86f8584fd0845366c326ed2e31326a1e'), 'hooks.js' => array('dependencies' => array('wp-polyfill'), 'version' => '02fd2defc23cb5c2837081df67b97158'), 'html-entities.js' => array('dependencies' => array('wp-polyfill'), 'version' => '140ecb91be91e7eec34220584d085033'), 'i18n.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '48abe0c2523b902e445788bb8132ef7e'), 'is-shallow-equal.js' => array('dependencies' => array('wp-pol
yfill'), 'version' => '798b660598677b39413fdb5f68624aa8'), 'keyboard-shortcuts.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '03be8557c1d6f9c98d9f2a39b0d45968'), 'keycodes.js' => array('dependencies' => array('lodash', 'wp-i18n', 'wp-polyfill'), 'version' => '34f4da80b9b52d7f35a142592777b29c'), 'list-reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '99752f8ee65e66fefce46b8af1dac732'), 'media-utils.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '52a1fb71f5e51adfecbe905eccae04b4'), 'notices.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-polyfill'), 'version' => '0b40907eed64e81bf22bb448c88642d3'), 'nux.js' => array('dependencies' => array('lodash', 'wp-com
ponents', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '1120e26c43e94121389f5d1c9f6e89b6'), 'plugins.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-polyfill', 'wp-primitives'), 'version' => 'c860421df5601d15a8df4afcbc212304'), 'primitives.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'dc0962ac2885a26f8c2abdbe0cf0e333'), 'priority-queue.js' => array('dependencies' => array('wp-polyfill'), 'version' => '18c93919f04bb681234310b314675b17'), 'redux-routine.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'c825bcfd263c88dcd76e14b67d47340b'), 'reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' =>
'2d4d45c0e771117074787655ee5efbcb'), 'rich-text.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-compose', 'wp-data', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => '04ed6c49d04854d7ca20cb9d321e5e87'), 'server-side-render.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '04ce14348d15952b7f9fed3b6e32a745'), 'shortcode.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '15757929bc8d52a3b184c3fcaeb38c64'), 'token-list.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '7bcd3684420783ef1f6ebb7680fe958e'), 'url.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'ef8beff0847cbaa0e337362716c13bea'), 'viewport.js' => array('dependencies' => array('lodash', 'wp-compos
e', 'wp-data', 'wp-element', 'wp-polyfill'), 'version' => 'a4b7cdcc29f09d698255b3aec03ac6c1'), 'warning.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5ebe2df53cf3c74ebffc7e2d3e76184c'), 'widgets.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => 'd8086829048e496d396102031b6b98f4'), 'wordcount.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '02339c8ad03da1e7a03f9212da004007'));
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerymediumpostsphp"></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/block-patterns/query-medium-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-medium-posts.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-medium-posts.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'title' => _x( 'Image at left', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content' => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px"> <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:columns {"align":"wide"} -->
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerysmallpostsphp"></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/block-patterns/query-small-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-small-posts.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-small-posts.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'title' => _x( 'Small image and title', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content' => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px"> <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:columns {"verticalAlignment":"center"} -->
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerystandardpostsphp"></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/block-patterns/query-standard-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-standard-posts.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-standard-posts.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'title' => _x( 'Standard', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content' => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px"> <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px"> <!-- wp:post-title {"isLink":true} /-->
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsborderphp"></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/block-supports/border.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/border.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/border.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -63,8 +63,23 @@
</span><span class="cx" style="display: block; padding: 0 10px"> wp_has_border_feature_support( $block_type, 'radius' ) &&
</span><span class="cx" style="display: block; padding: 0 10px"> isset( $block_attributes['style']['border']['radius'] )
</span><span class="cx" style="display: block; padding: 0 10px"> ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $border_radius = (int) $block_attributes['style']['border']['radius'];
- $styles[] = sprintf( 'border-radius: %dpx;', $border_radius );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $border_radius = $block_attributes['style']['border']['radius'];
+
+ if ( is_array( $border_radius ) ) {
+ // We have individual border radius corner values.
+ foreach ( $border_radius as $key => $radius ) {
+ // Convert CamelCase corner name to kebab-case.
+ $corner = strtolower( preg_replace( '/(?<!^)[A-Z]/', '-$0', $key ) );
+ $styles[] = sprintf( 'border-%s-radius: %s;', $corner, $radius );
+ }
+ } else {
+ // This check handles original unitless implementation.
+ if ( is_numeric( $border_radius ) ) {
+ $border_radius .= 'px';
+ }
+
+ $styles[] = sprintf( 'border-radius: %s;', $border_radius );
+ }
</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"> // Border style.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -81,8 +96,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> wp_has_border_feature_support( $block_type, 'width' ) &&
</span><span class="cx" style="display: block; padding: 0 10px"> isset( $block_attributes['style']['border']['width'] )
</span><span class="cx" style="display: block; padding: 0 10px"> ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $border_width = intval( $block_attributes['style']['border']['width'] );
- $styles[] = sprintf( 'border-width: %dpx;', $border_width );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $border_width = $block_attributes['style']['border']['width'];
+
+ // This check handles original unitless implementation.
+ if ( is_numeric( $border_width ) ) {
+ $border_width .= 'px';
+ }
+
+ $styles[] = sprintf( 'border-width: %s;', $border_width );
</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"> // Border color.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportscolorsphp"></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/block-supports/colors.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/colors.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/colors.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,7 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> // Apply color class or inline style.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $has_named_text_color ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $classes[] = sprintf( 'has-%s-color', $block_attributes['textColor'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $classes[] = sprintf( 'has-%s-color', _wp_to_kebab_case( $block_attributes['textColor'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> } elseif ( $has_custom_text_color ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'color: %s;', $block_attributes['style']['color']['text'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -116,7 +116,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> // Apply background color classes or styles.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $has_named_background_color ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $classes[] = sprintf( 'has-%s-background-color', $block_attributes['backgroundColor'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $classes[] = sprintf( 'has-%s-background-color', _wp_to_kebab_case( $block_attributes['backgroundColor'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> } elseif ( $has_custom_background_color ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'background-color: %s;', $block_attributes['style']['color']['background'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -132,7 +132,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> // Apply required background class.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $has_named_gradient ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $classes[] = sprintf( 'has-%s-gradient-background', $block_attributes['gradient'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $classes[] = sprintf( 'has-%s-gradient-background', _wp_to_kebab_case( $block_attributes['gradient'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> } elseif ( $has_custom_gradient ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'background: %s;', $block_attributes['style']['color']['gradient'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsdimensionsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/block-supports/dimensions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/dimensions.php (rev 0)
+++ trunk/src/wp-includes/block-supports/dimensions.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,92 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Dimensions block support flag.
+ *
+ * This does not include the `spacing` block support even though that visually
+ * appears under the "Dimensions" panel in the editor. It remains in its
+ * original `spacing.php` file for backwards compatibility.
+ *
+ * @package WordPress
+ * @since 5.9.0
+ */
+
+/**
+ * Registers the style block attribute for block types that support it.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_Type $block_type Block Type.
+ */
+function wp_register_dimensions_support( $block_type ) {
+ // Setup attributes and styles within that if needed.
+ if ( ! $block_type->attributes ) {
+ $block_type->attributes = array();
+ }
+
+ // Check for existing style attribute definition e.g. from block.json.
+ if ( array_key_exists( 'style', $block_type->attributes ) ) {
+ return;
+ }
+
+ $has_dimensions_support = block_has_support( $block_type, array( '__experimentalDimensions' ), false );
+ // Future block supports such as height & width will be added here.
+
+ if ( $has_dimensions_support ) {
+ $block_type->attributes['style'] = array(
+ 'type' => 'object',
+ );
+ }
+}
+
+/**
+ * Add CSS classes for block dimensions to the incoming attributes array.
+ * This will be applied to the block markup in the front-end.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_Type $block_type Block Type.
+ * @param array $block_attributes Block attributes.
+ *
+ * @return array Block dimensions CSS classes and inline styles.
+ */
+function wp_apply_dimensions_support( $block_type, $block_attributes ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
+ if ( wp_skip_dimensions_serialization( $block_type ) ) {
+ return array();
+ }
+
+ $styles = array();
+
+ // Height support to be added in near future.
+ // Width support to be added in near future.
+
+ return empty( $styles ) ? array() : array( 'style' => implode( ' ', $styles ) );
+}
+
+/**
+ * Checks whether serialization of the current block's dimensions properties
+ * should occur.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_type $block_type Block type.
+ *
+ * @return boolean Whether to serialize spacing support styles & classes.
+ */
+function wp_skip_dimensions_serialization( $block_type ) {
+ $dimensions_support = _wp_array_get( $block_type->supports, array( '__experimentalDimensions' ), false );
+ return is_array( $dimensions_support ) &&
+ array_key_exists( '__experimentalSkipSerialization', $dimensions_support ) &&
+ $dimensions_support['__experimentalSkipSerialization'];
+}
+
+// Register the block support.
+WP_Block_Supports::get_instance()->register(
+ 'dimensions',
+ array(
+ 'register_attribute' => 'wp_register_dimensions_support',
+ 'apply' => 'wp_apply_dimensions_support',
+ )
+);
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/block-supports/dimensions.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksupportsduotonephp"></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/block-supports/duotone.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/duotone.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/duotone.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -266,7 +266,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $hsla_regexp = '/^hsla' . $permissive_match4 . '$/';
</span><span class="cx" style="display: block; padding: 0 10px"> if ( preg_match( $hsla_regexp, $color_str, $match ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- return wp_tinycolor_hsl_to_rgb(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $rgb = wp_tinycolor_hsl_to_rgb(
</ins><span class="cx" style="display: block; padding: 0 10px"> array(
</span><span class="cx" style="display: block; padding: 0 10px"> 'h' => $match[1],
</span><span class="cx" style="display: block; padding: 0 10px"> 's' => $match[2],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -384,13 +384,16 @@
</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">+
</ins><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Renders the duotone filter SVG and returns the CSS filter property to
</span><span class="cx" style="display: block; padding: 0 10px"> * reference the rendered SVG.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.9.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @access private
+
+ * @param array $preset Duotone preset value as seen in theme.json.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param array $preset Duotone preset value as seen in theme.json.
</del><span class="cx" style="display: block; padding: 0 10px"> * @return string Duotone CSS filter property.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_duotone_filter_preset( $preset ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -460,13 +463,11 @@
</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"> add_action(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- /*
- * Safari doesn't render SVG filters defined in data URIs,
- * and SVG filters won't render in the head of a document,
- * so the next best place to put the SVG is in the footer.
- */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Safari doesn't render SVG filters defined in data URIs,
+ // and SVG filters won't render in the head of a document,
+ // so the next best place to put the SVG is in the footer.
</ins><span class="cx" style="display: block; padding: 0 10px"> is_admin() ? 'admin_footer' : 'wp_footer',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- static function () use ( $svg ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ function () use ( $svg ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> echo $svg;
</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">@@ -502,84 +503,38 @@
</span><span class="cx" style="display: block; padding: 0 10px"> return $block_content;
</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">- $duotone_colors = $block['attrs']['style']['color']['duotone'];
-
- $duotone_values = array(
- 'r' => array(),
- 'g' => array(),
- 'b' => array(),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $filter_preset = array(
+ 'slug' => uniqid(),
+ 'colors' => $block['attrs']['style']['color']['duotone'],
</ins><span class="cx" style="display: block; padding: 0 10px"> );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- foreach ( $duotone_colors as $color_str ) {
- $color = wp_tinycolor_string_to_rgb( $color_str );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $filter_property = wp_render_duotone_filter_preset( $filter_preset );
+ $filter_id = 'wp-duotone-' . $filter_preset['slug'];
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $duotone_values['r'][] = $color['r'] / 255;
- $duotone_values['g'][] = $color['g'] / 255;
- $duotone_values['b'][] = $color['b'] / 255;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $scope = '.' . $filter_id;
+ $selectors = explode( ',', $duotone_support );
+ $scoped = array();
+ foreach ( $selectors as $sel ) {
+ $scoped[] = $scope . ' ' . trim( $sel );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $selector = implode( ', ', $scoped );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $duotone_id = 'wp-duotone-filter-' . uniqid();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // !important is needed because these styles render before global styles,
+ // and they should be overriding the duotone filters set by global styles.
+ $filter_style = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG
+ ? $selector . " {\n\tfilter: " . $filter_property . " !important;\n}\n"
+ : $selector . '{filter:' . $filter_property . ' !important;}';
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $selectors = explode( ',', $duotone_support );
- $selectors_scoped = array_map(
- static function ( $selector ) use ( $duotone_id ) {
- return '.' . $duotone_id . ' ' . trim( $selector );
- },
- $selectors
- );
- $selectors_group = implode( ', ', $selectors_scoped );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ wp_register_style( $filter_id, false, array(), true, true );
+ wp_add_inline_style( $filter_id, $filter_style );
+ wp_enqueue_style( $filter_id );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- ob_start();
-
- ?>
-
- <style>
- <?php echo $selectors_group; ?> {
- filter: url( <?php echo esc_url( '#' . $duotone_id ); ?> );
- }
- </style>
-
- <svg
- xmlns:xlink="http://www.w3.org/1999/xlink"
- viewBox="0 0 0 0"
- width="0"
- height="0"
- focusable="false"
- role="none"
- style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;"
- >
- <defs>
- <filter id="<?php echo esc_attr( $duotone_id ); ?>">
- <feColorMatrix
- type="matrix"
- <?php // phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent ?>
- values=".299 .587 .114 0 0
- .299 .587 .114 0 0
- .299 .587 .114 0 0
- 0 0 0 1 0"
- <?php // phpcs:enable Generic.WhiteSpace.DisallowSpaceIndent ?>
- />
- <feComponentTransfer color-interpolation-filters="sRGB" >
- <feFuncR type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['r'] ) ); ?>" />
- <feFuncG type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['g'] ) ); ?>" />
- <feFuncB type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['b'] ) ); ?>" />
- </feComponentTransfer>
- </filter>
- </defs>
- </svg>
-
- <?php
-
- $duotone = ob_get_clean();
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Like the layout hook, this assumes the hook only applies to blocks with a single wrapper.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $content = preg_replace(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return preg_replace(
</ins><span class="cx" style="display: block; padding: 0 10px"> '/' . preg_quote( 'class="', '/' ) . '/',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'class="' . $duotone_id . ' ',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'class="' . $filter_id . ' ',
</ins><span class="cx" style="display: block; padding: 0 10px"> $block_content,
</span><span class="cx" style="display: block; padding: 0 10px"> 1
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- return $content . $duotone;
</del><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"> // Register the block support.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportselementsphp"></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/block-supports/elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/elements.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/elements.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,6 +17,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @return string Filtered block content.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_elements_support( $block_content, $block ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! $block_content ) {
+ return $block_content;
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> $link_color = null;
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $block['attrs'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $link_color = _wp_array_get( $block['attrs'], array( 'style', 'elements', 'link', 'color', 'text' ), null );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,7 +46,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> $link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $style = "<style>.$class_name a{" . $link_color_declaration . " !important;}</style>\n";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $style = "<style>.$class_name a{" . $link_color_declaration . ";}</style>\n";
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Like the layout hook this assumes the hook only applies to blocks with a single wrapper.
</span><span class="cx" style="display: block; padding: 0 10px"> // Retrieve the opening tag of the first HTML element.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -64,8 +68,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $content = substr_replace( $block_content, ' class="' . $class_name . '"', $first_element_offset + strlen( $first_element ) - 1, 0 );
</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">- return $content . $style;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+ * Ideally styles should be loaded in the head, but blocks may be parsed
+ * after that, so loading in the footer for now.
+ * See https://core.trac.wordpress.org/ticket/53494.
+ */
+ add_action(
+ 'wp_footer',
+ static function () use ( $style ) {
+ echo $style;
+ }
+ );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return $content;
</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"> add_filter( 'render_block', 'wp_render_elements_support', 10, 2 );
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportslayoutphp"></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/block-supports/layout.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/layout.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/layout.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30,6 +30,106 @@
</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">+ * Generates the CSS corresponding to the provided layout.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param string $selector CSS selector.
+ * @param array $layout Layout object. The one that is passed has already checked the existance of default block layout.
+ * @param boolean $has_block_gap_support Whether the theme has support for the block gap.
+ *
+ * @return string CSS style.
+ */
+function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false ) {
+ $layout_type = isset( $layout['type'] ) ? $layout['type'] : 'default';
+
+ $style = '';
+ if ( 'default' === $layout_type ) {
+ $content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : null;
+ $wide_size = isset( $layout['wideSize'] ) ? $layout['wideSize'] : null;
+
+ $all_max_width_value = $content_size ? $content_size : $wide_size;
+ $wide_max_width_value = $wide_size ? $wide_size : $content_size;
+
+ // Make sure there is a single CSS rule, and all tags are stripped for security.
+ // TODO: Use `safecss_filter_attr` instead - once https://core.trac.wordpress.org/ticket/46197 is patched.
+ $all_max_width_value = wp_strip_all_tags( explode( ';', $all_max_width_value )[0] );
+ $wide_max_width_value = wp_strip_all_tags( explode( ';', $wide_max_width_value )[0] );
+
+ $style = '';
+ if ( $content_size || $wide_size ) {
+ $style = "$selector > * {";
+ $style .= 'max-width: ' . esc_html( $all_max_width_value ) . ';';
+ $style .= 'margin-left: auto !important;';
+ $style .= 'margin-right: auto !important;';
+ $style .= '}';
+
+ $style .= "$selector > .alignwide { max-width: " . esc_html( $wide_max_width_value ) . ';}';
+ $style .= "$selector .alignfull { max-width: none; }";
+ }
+
+ $style .= "$selector .alignleft { float: left; margin-right: 2em; }";
+ $style .= "$selector .alignright { float: right; margin-left: 2em; }";
+ if ( $has_block_gap_support ) {
+ $style .= "$selector > * { margin-top: 0; margin-bottom: 0; }";
+ $style .= "$selector > * + * { margin-top: var( --wp--style--block-gap ); margin-bottom: 0; }";
+ }
+ } elseif ( 'flex' === $layout_type ) {
+ $layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';
+
+ $justify_content_options = array(
+ 'left' => 'flex-start',
+ 'right' => 'flex-end',
+ 'center' => 'center',
+ );
+
+ if ( 'horizontal' === $layout_orientation ) {
+ $justify_content_options += array( 'space-between' => 'space-between' );
+ }
+
+ $flex_wrap_options = array( 'wrap', 'nowrap' );
+ $flex_wrap = ! empty( $layout['flexWrap'] ) && in_array( $layout['flexWrap'], $flex_wrap_options, true ) ?
+ $layout['flexWrap'] :
+ 'wrap';
+
+ $style = "$selector {";
+ $style .= 'display: flex;';
+ if ( $has_block_gap_support ) {
+ $style .= 'gap: var( --wp--style--block-gap, 0.5em );';
+ } else {
+ $style .= 'gap: 0.5em;';
+ }
+ $style .= "flex-wrap: $flex_wrap;";
+ $style .= 'align-items: center;';
+ if ( 'horizontal' === $layout_orientation ) {
+ $style .= 'align-items: center;';
+ /**
+ * Add this style only if is not empty for backwards compatibility,
+ * since we intend to convert blocks that had flex layout implemented
+ * by custom css.
+ */
+ if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
+ $style .= "justify-content: {$justify_content_options[ $layout['justifyContent'] ]};";
+ // --justification-setting allows children to inherit the value regardless or row or column direction.
+ $style .= "--justification-setting: {$justify_content_options[ $layout['justifyContent'] ]};";
+ }
+ } else {
+ $style .= 'flex-direction: column;';
+ if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
+ $style .= "align-items: {$justify_content_options[ $layout['justifyContent'] ]};";
+ $style .= "--justification-setting: {$justify_content_options[ $layout['justifyContent'] ]};";
+ }
+ }
+ $style .= '}';
+
+ $style .= "$selector > * { margin: 0; }";
+ }
+
+ return $style;
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px"> * Renders the layout config to the block wrapper.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.8.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,14 +142,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_layout_support_flag( $block_content, $block ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
</span><span class="cx" style="display: block; padding: 0 10px"> $support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! $support_layout || ! isset( $block['attrs']['layout'] ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ if ( ! $support_layout ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> return $block_content;
</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">- $used_layout = $block['attrs']['layout'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $block_gap = wp_get_global_settings( array( 'spacing', 'blockGap' ) );
+ $default_layout = wp_get_global_settings( array( 'layout' ) );
+ $has_block_gap_support = isset( $block_gap ) ? null !== $block_gap : false;
+ $default_block_layout = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
+ $used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $tree = WP_Theme_JSON_Resolver::get_merged_data();
- $default_layout = _wp_array_get( $tree->get_settings(), array( 'layout' ) );
</del><span class="cx" style="display: block; padding: 0 10px"> if ( ! $default_layout ) {
</span><span class="cx" style="display: block; padding: 0 10px"> return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,33 +159,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $used_layout = $default_layout;
</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">- $id = uniqid();
- $content_size = isset( $used_layout['contentSize'] ) ? $used_layout['contentSize'] : null;
- $wide_size = isset( $used_layout['wideSize'] ) ? $used_layout['wideSize'] : null;
-
- $all_max_width_value = $content_size ? $content_size : $wide_size;
- $wide_max_width_value = $wide_size ? $wide_size : $content_size;
-
- // Make sure there is a single CSS rule, and all tags are stripped for security.
- $all_max_width_value = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
- $wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );
-
- $style = '';
- if ( $content_size || $wide_size ) {
- $style = ".wp-container-$id > * {";
- $style .= 'max-width: ' . esc_html( $all_max_width_value ) . ';';
- $style .= 'margin-left: auto !important;';
- $style .= 'margin-right: auto !important;';
- $style .= '}';
-
- $style .= ".wp-container-$id > .alignwide { max-width: " . esc_html( $wide_max_width_value ) . ';}';
-
- $style .= ".wp-container-$id .alignfull { max-width: none; }";
- }
-
- $style .= ".wp-container-$id .alignleft { float: left; margin-right: 2em; }";
- $style .= ".wp-container-$id .alignright { float: right; margin-left: 2em; }";
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $id = uniqid();
+ $style = wp_get_layout_style( ".wp-container-$id", $used_layout, $has_block_gap_support );
</ins><span class="cx" style="display: block; padding: 0 10px"> // This assumes the hook only applies to blocks with a single wrapper.
</span><span class="cx" style="display: block; padding: 0 10px"> // I think this is a reasonable limitation for that particular hook.
</span><span class="cx" style="display: block; padding: 0 10px"> $content = preg_replace(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -92,7 +170,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 1
</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">- return $content . '<style>' . $style . '</style>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+ * Ideally styles should be loaded in the head, but blocks may be parsed
+ * after that, so loading in the footer for now.
+ * See https://core.trac.wordpress.org/ticket/53494.
+ */
+ add_action(
+ 'wp_footer',
+ static function () use ( $style ) {
+ echo '<style>' . $style . '</style>';
+ }
+ );
+
+ return $content;
</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"> // Register the block support.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -123,7 +213,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> if (
</span><span class="cx" style="display: block; padding: 0 10px"> 'core/group' !== $block['blockName'] ||
</span><span class="cx" style="display: block; padding: 0 10px"> WP_Theme_JSON_Resolver::theme_has_support() ||
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 1 === preg_match( $group_with_inner_container_regex, $block_content )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
+ ( isset( $block['attrs']['layout']['type'] ) && 'default' !== $block['attrs']['layout']['type'] )
</ins><span class="cx" style="display: block; padding: 0 10px"> ) {
</span><span class="cx" style="display: block; padding: 0 10px"> return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsspacingphp"></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/block-supports/spacing.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/spacing.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/spacing.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,6 +1,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Spacing block support flag.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ * For backwards compatibility, this remains separate to the dimensions.php
+ * block support despite both belonging under a single panel in the editor.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @package WordPress
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.8.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,25 +45,33 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @return array Block spacing CSS classes and inline styles.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_apply_spacing_support( $block_type, $block_attributes ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $has_padding_support = wp_has_spacing_feature_support( $block_type, 'padding' );
- $has_margin_support = wp_has_spacing_feature_support( $block_type, 'margin' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( wp_skip_spacing_serialization( $block_type ) ) {
+ return array();
+ }
+
+ $has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false );
+ $has_margin_support = block_has_support( $block_type, array( 'spacing', 'margin' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px"> $styles = array();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $has_padding_support ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $padding_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'padding' ), null );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( null !== $padding_value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( is_array( $padding_value ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> foreach ( $padding_value as $key => $value ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'padding-%s: %s;', $key, $value );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ } elseif ( null !== $padding_value ) {
+ $styles[] = sprintf( 'padding: %s;', $padding_value );
</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="cx" style="display: block; padding: 0 10px"> if ( $has_margin_support ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $margin_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'margin' ), null );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( null !== $margin_value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( is_array( $margin_value ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> foreach ( $margin_value as $key => $value ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'margin-%s: %s;', $key, $value );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ } elseif ( null !== $margin_value ) {
+ $styles[] = sprintf( 'margin: %s;', $margin_value );
</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">@@ -68,22 +79,77 @@
</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">- * Checks whether the current block type supports the spacing feature requested.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Checks whether serialization of the current block's spacing properties should
+ * occur.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 5.8.0
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 5.9.0
</ins><span class="cx" style="display: block; padding: 0 10px"> * @access private
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param WP_Block_Type $block_type Block type to check for support.
- * @param string $feature Name of the feature to check support for.
- * @param mixed $default Fallback value for feature support. Default false.
- * @return bool Whether the feature is supported.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param WP_Block_Type $block_type Block type.
+ *
+ * @return boolean Whether to serialize spacing support styles & classes.
</ins><span class="cx" style="display: block; padding: 0 10px"> */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function wp_has_spacing_feature_support( $block_type, $feature, $default = false ) {
- // Check if the specific feature has been opted into individually
- // via nested flag under `spacing`.
- return block_has_support( $block_type, array( 'spacing', $feature ), $default );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function wp_skip_spacing_serialization( $block_type ) {
+ $spacing_support = _wp_array_get( $block_type->supports, array( 'spacing' ), false );
+
+ return is_array( $spacing_support ) &&
+ array_key_exists( '__experimentalSkipSerialization', $spacing_support ) &&
+ $spacing_support['__experimentalSkipSerialization'];
</ins><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">+/**
+ * Renders the spacing gap support to the block wrapper, to ensure
+ * that the CSS variable is rendered in all environments.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param string $block_content Rendered block content.
+ * @param array $block Block object.
+ * @return string Filtered block content.
+ */
+function wp_render_spacing_gap_support( $block_content, $block ) {
+ $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
+ $has_gap_support = block_has_support( $block_type, array( 'spacing', 'blockGap' ), false );
+ if ( ! $has_gap_support || ! isset( $block['attrs']['style']['spacing']['blockGap'] ) ) {
+ return $block_content;
+ }
+
+ $gap_value = $block['attrs']['style']['spacing']['blockGap'];
+
+ // Skip if gap value contains unsupported characters.
+ // Regex for CSS value borrowed from `safecss_filter_attr`, and used here
+ // because we only want to match against the value, not the CSS attribute.
+ if ( preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ) {
+ return $block_content;
+ }
+
+ $style = sprintf(
+ '--wp--style--block-gap: %s',
+ esc_attr( $gap_value )
+ );
+
+ // Attempt to update an existing style attribute on the wrapper element.
+ $injected_style = preg_replace(
+ '/^([^>.]+?)(' . preg_quote( 'style="', '/' ) . ')(?=.+?>)/',
+ '$1$2' . $style . '; ',
+ $block_content,
+ 1
+ );
+
+ // If there is no existing style attribute, add one to the wrapper element.
+ if ( $injected_style === $block_content ) {
+ $injected_style = preg_replace(
+ '/<([a-zA-Z0-9]+)([ >])/',
+ '<$1 style="' . $style . '"$2',
+ $block_content,
+ 1
+ );
+ };
+
+ return $injected_style;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Register the block support.
</span><span class="cx" style="display: block; padding: 0 10px"> WP_Block_Supports::get_instance()->register(
</span><span class="cx" style="display: block; padding: 0 10px"> 'spacing',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -92,3 +158,5 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'apply' => 'wp_apply_spacing_support',
</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">+
+add_filter( 'render_block', 'wp_render_spacing_gap_support', 10, 2 );
</ins></span></pre></div>
<a id="trunksrcwpincludesblocksupportstypographyphp"></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/block-supports/typography.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/typography.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/typography.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28,6 +28,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_size_support = _wp_array_get( $typography_supports, array( 'fontSize' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_style_support = _wp_array_get( $typography_supports, array( '__experimentalFontStyle' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_weight_support = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $has_letter_spacing_support = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px"> $has_line_height_support = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_text_transform_support = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36,6 +37,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> || $has_font_size_support
</span><span class="cx" style="display: block; padding: 0 10px"> || $has_font_style_support
</span><span class="cx" style="display: block; padding: 0 10px"> || $has_font_weight_support
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ || $has_letter_spacing_support
</ins><span class="cx" style="display: block; padding: 0 10px"> || $has_line_height_support
</span><span class="cx" style="display: block; padding: 0 10px"> || $has_text_decoration_support
</span><span class="cx" style="display: block; padding: 0 10px"> || $has_text_transform_support;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -93,6 +95,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_size_support = _wp_array_get( $typography_supports, array( 'fontSize' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_style_support = _wp_array_get( $typography_supports, array( '__experimentalFontStyle' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_font_weight_support = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $has_letter_spacing_support = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px"> $has_line_height_support = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
</span><span class="cx" style="display: block; padding: 0 10px"> $has_text_transform_support = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -102,7 +105,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $has_custom_font_size = isset( $block_attributes['style']['typography']['fontSize'] );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $has_named_font_size ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $classes[] = sprintf( 'has-%s-font-size', $block_attributes['fontSize'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $classes[] = sprintf( 'has-%s-font-size', _wp_to_kebab_case( $block_attributes['fontSize'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> } elseif ( $has_custom_font_size ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $styles[] = sprintf( 'font-size: %s;', $block_attributes['style']['typography']['fontSize'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,17 +112,21 @@
</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"> if ( $has_font_family_support ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $has_font_family = isset( $block_attributes['style']['typography']['fontFamily'] );
- if ( $has_font_family ) {
- $font_family = $block_attributes['style']['typography']['fontFamily'];
- if ( strpos( $font_family, 'var:preset|font-family' ) !== false ) {
- // Get the name from the string and add proper styles.
- $index_to_splice = strrpos( $font_family, '|' ) + 1;
- $font_family_name = substr( $font_family, $index_to_splice );
- $styles[] = sprintf( 'font-family: var(--wp--preset--font-family--%s);', $font_family_name );
- } else {
- $styles[] = sprintf( 'font-family: %s;', $block_attributes['style']['typography']['fontFamily'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $has_named_font_family = array_key_exists( 'fontFamily', $block_attributes );
+ $has_custom_font_family = isset( $block_attributes['style']['typography']['fontFamily'] );
+
+ if ( $has_named_font_family ) {
+ $classes[] = sprintf( 'has-%s-font-family', _wp_to_kebab_case( $block_attributes['fontFamily'] ) );
+ } elseif ( $has_custom_font_family ) {
+ // Before using classes, the value was serialized as a CSS Custom Property.
+ // We don't need this code path when it lands in core.
+ $font_family_custom = $block_attributes['style']['typography']['fontFamily'];
+ if ( strpos( $font_family_custom, 'var:preset|font-family' ) !== false ) {
+ $index_to_splice = strrpos( $font_family_custom, '|' ) + 1;
+ $font_family_slug = _wp_to_kebab_case( substr( $font_family_custom, $index_to_splice ) );
+ $font_family_custom = sprintf( 'var(--wp--preset--font-family--%s)', $font_family_slug );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $styles[] = sprintf( 'font-family: %s;', $font_family_custom );
</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">@@ -158,6 +165,13 @@
</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">+ if ( $has_letter_spacing_support ) {
+ $letter_spacing_style = wp_typography_get_css_variable_inline_style( $block_attributes, 'letterSpacing', 'letter-spacing' );
+ if ( $letter_spacing_style ) {
+ $styles[] = $letter_spacing_style;
+ }
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $classes ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $attributes['class'] = implode( ' ', $classes );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksindexphp"></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/blocks/index.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/index.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/blocks/index.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15,29 +15,38 @@
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/latest-posts.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/legacy-widget.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/loginout.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/navigation-area.php';
+require ABSPATH . WPINC . '/blocks/navigation-link.php';
+require ABSPATH . WPINC . '/blocks/navigation-submenu.php';
+require ABSPATH . WPINC . '/blocks/navigation.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/page-list.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/pattern.php';
+require ABSPATH . WPINC . '/blocks/post-author.php';
+require ABSPATH . WPINC . '/blocks/post-comments.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-content.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-date.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-excerpt.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-featured-image.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/post-navigation-link.php';
+require ABSPATH . WPINC . '/blocks/post-template.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-terms.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-title.php';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-require ABSPATH . WPINC . '/blocks/post-template.php';
-require ABSPATH . WPINC . '/blocks/query.php';
-require ABSPATH . WPINC . '/blocks/query-pagination.php';
</del><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-next.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-numbers.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-previous.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/query-pagination.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-title.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/query.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/rss.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/search.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/shortcode.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/site-logo.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/site-tagline.php';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-require ABSPATH . WPINC . '/blocks/site-logo.php';
</del><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/site-title.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/social-link.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/tag-cloud.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/template-part.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/term-description.php';
</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"> * Registers core block types using metadata files.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksnavigationblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,124 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/navigation",
+ "title": "Navigation",
+ "category": "theme",
+ "description": "A collection of blocks that allow visitors to get around your site.",
+ "keywords": [
+ "menu",
+ "navigation",
+ "links"
+ ],
+ "textdomain": "default",
+ "attributes": {
+ "navigationMenuId": {
+ "type": "number"
+ },
+ "textColor": {
+ "type": "string"
+ },
+ "customTextColor": {
+ "type": "string"
+ },
+ "rgbTextColor": {
+ "type": "string"
+ },
+ "backgroundColor": {
+ "type": "string"
+ },
+ "customBackgroundColor": {
+ "type": "string"
+ },
+ "rgbBackgroundColor": {
+ "type": "string"
+ },
+ "showSubmenuIcon": {
+ "type": "boolean",
+ "default": true
+ },
+ "openSubmenusOnClick": {
+ "type": "boolean",
+ "default": false
+ },
+ "overlayMenu": {
+ "type": "string",
+ "default": "mobile"
+ },
+ "__unstableLocation": {
+ "type": "string"
+ },
+ "overlayBackgroundColor": {
+ "type": "string"
+ },
+ "customOverlayBackgroundColor": {
+ "type": "string"
+ },
+ "overlayTextColor": {
+ "type": "string"
+ },
+ "customOverlayTextColor": {
+ "type": "string"
+ }
+ },
+ "usesContext": [ "navigationArea" ],
+ "providesContext": {
+ "textColor": "textColor",
+ "customTextColor": "customTextColor",
+ "backgroundColor": "backgroundColor",
+ "customBackgroundColor": "customBackgroundColor",
+ "overlayTextColor": "overlayTextColor",
+ "customOverlayTextColor": "customOverlayTextColor",
+ "overlayBackgroundColor": "overlayBackgroundColor",
+ "customOverlayBackgroundColor": "customOverlayBackgroundColor",
+ "fontSize": "fontSize",
+ "customFontSize": "customFontSize",
+ "showSubmenuIcon": "showSubmenuIcon",
+ "openSubmenusOnClick": "openSubmenusOnClick",
+ "style": "style",
+ "orientation": "orientation"
+ },
+ "supports": {
+ "align": [
+ "wide",
+ "full"
+ ],
+ "anchor": true,
+ "html": false,
+ "inserter": true,
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalFontStyle": true,
+ "__experimentalFontWeight": true,
+ "__experimentalTextTransform": true,
+ "__experimentalFontFamily": true,
+ "__experimentalTextDecoration": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true
+ }
+ },
+ "spacing": {
+ "blockGap": true,
+ "units": [
+ "px",
+ "em",
+ "rem",
+ "vh",
+ "vw"
+ ],
+ "__experimentalDefaultControls": {
+ "blockGap": true
+ }
+ },
+ "__experimentalLayout": {
+ "allowSwitching": false,
+ "allowInheriting": false,
+ "default": {
+ "type": "flex"
+ }
+ }
+ },
+ "viewScript": "file:./view.min.js",
+ "editorStyle": "wp-block-navigation-editor",
+ "style": "wp-block-navigation"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationviewassetphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/view.asset.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/view.asset.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/view.asset.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('dependencies' => array(), 'version' => '86538493346805d860c94eb70dd1323d');
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/view.asset.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationviewminassetphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/view.min.asset.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/view.min.asset.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/view.min.asset.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('dependencies' => array(), 'version' => '7b2c5174a07c417dc3db6f1d9a9c3f78');
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/view.min.asset.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationareablockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-area/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-area/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-area/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,27 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/navigation-area",
+ "title": "Navigation Area",
+ "category": "theme",
+ "description": "Define a navigation area for your theme. The navigation block associated with this area will be automatically displayed.",
+ "keywords": [
+ "menu",
+ "navigation",
+ "links",
+ "location"
+ ],
+ "textdomain": "default",
+ "attributes": {
+ "area": {
+ "type": "string",
+ "default": "primary"
+ }
+ },
+ "providesContext": {
+ "navigationArea": "area"
+ },
+ "supports": {
+ "html": false,
+ "inserter": true
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-area/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationareaphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-area.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-area.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-area.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,21 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-area` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Registers the `core/navigation-area` block on the server.
+ */
+function register_block_core_navigation_area() {
+ register_block_type_from_metadata(
+ __DIR__ . '/navigation-area',
+ array(
+ 'provides_context' => array(
+ 'navigationArea' => 'area',
+ ),
+ )
+ );
+}
+add_action( 'init', 'register_block_core_navigation_area' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-area.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationlinkblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-link/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-link/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-link/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,65 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/navigation-link",
+ "title": "Custom Link",
+ "category": "design",
+ "parent": [
+ "core/navigation"
+ ],
+ "description": "Add a page, link, or another item to your navigation.",
+ "textdomain": "default",
+ "attributes": {
+ "label": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "rel": {
+ "type": "string"
+ },
+ "id": {
+ "type": "number"
+ },
+ "opensInNewTab": {
+ "type": "boolean",
+ "default": false
+ },
+ "url": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "string"
+ },
+ "isTopLevelLink": {
+ "type": "boolean"
+ }
+ },
+ "usesContext": [
+ "textColor",
+ "customTextColor",
+ "backgroundColor",
+ "customBackgroundColor",
+ "overlayTextColor",
+ "customOverlayTextColor",
+ "overlayBackgroundColor",
+ "customOverlayBackgroundColor",
+ "fontSize",
+ "customFontSize",
+ "showSubmenuIcon",
+ "style"
+ ],
+ "supports": {
+ "reusable": false,
+ "html": false,
+ "__experimentalSlashInserter": true
+ },
+ "editorStyle": "wp-block-navigation-link-editor",
+ "style": "wp-block-navigation-link"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-link/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationlinkphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-link.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-link.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-link.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,350 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-link` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $context Navigation block context.
+ * @param array $attributes Block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_link_build_css_colors( $context, $attributes ) {
+ $colors = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ $is_sub_menu = isset( $attributes['isTopLevelLink'] ) ? ( ! $attributes['isTopLevelLink'] ) : false;
+
+ // Text color.
+ $named_text_color = null;
+ $custom_text_color = null;
+
+ if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) {
+ $custom_text_color = $context['customOverlayTextColor'];
+ } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) {
+ $named_text_color = $context['overlayTextColor'];
+ } elseif ( array_key_exists( 'customTextColor', $context ) ) {
+ $custom_text_color = $context['customTextColor'];
+ } elseif ( array_key_exists( 'textColor', $context ) ) {
+ $named_text_color = $context['textColor'];
+ } elseif ( isset( $context['style']['color']['text'] ) ) {
+ $custom_text_color = $context['style']['color']['text'];
+ }
+
+ // If has text color.
+ if ( ! is_null( $named_text_color ) ) {
+ // Add the color class.
+ array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) );
+ } elseif ( ! is_null( $custom_text_color ) ) {
+ // Add the custom color inline style.
+ $colors['css_classes'][] = 'has-text-color';
+ $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color );
+ }
+
+ // Background color.
+ $named_background_color = null;
+ $custom_background_color = null;
+
+ if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) {
+ $custom_background_color = $context['customOverlayBackgroundColor'];
+ } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) {
+ $named_background_color = $context['overlayBackgroundColor'];
+ } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) {
+ $custom_background_color = $context['customBackgroundColor'];
+ } elseif ( array_key_exists( 'backgroundColor', $context ) ) {
+ $named_background_color = $context['backgroundColor'];
+ } elseif ( isset( $context['style']['color']['background'] ) ) {
+ $custom_background_color = $context['style']['color']['background'];
+ }
+
+ // If has background color.
+ if ( ! is_null( $named_background_color ) ) {
+ // Add the background-color class.
+ array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) );
+ } elseif ( ! is_null( $custom_background_color ) ) {
+ // Add the custom background-color inline style.
+ $colors['css_classes'][] = 'has-background';
+ $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color );
+ }
+
+ return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $context Navigation block context.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_link_build_css_font_sizes( $context ) {
+ // CSS classes.
+ $font_sizes = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ $has_named_font_size = array_key_exists( 'fontSize', $context );
+ $has_custom_font_size = isset( $context['style']['typography']['fontSize'] );
+
+ if ( $has_named_font_size ) {
+ // Add the font size class.
+ $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
+ } elseif ( $has_custom_font_size ) {
+ // Add the custom font size inline style.
+ $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $context['style']['typography']['fontSize'] );
+ }
+
+ return $font_sizes;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_link_render_submenu_icon() {
+ return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation-link` block.
+ *
+ * @param array $attributes The block attributes.
+ * @param array $content The saved content.
+ * @param array $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation_link( $attributes, $content, $block ) {
+ $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
+ $is_post_type = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
+ $is_post_type = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );
+
+ // Don't render the block's subtree if it is a draft or if the ID does not exist.
+ if ( $is_post_type && $navigation_link_has_id ) {
+ $post = get_post( $attributes['id'] );
+ if ( ! $post || 'publish' !== $post->post_status ) {
+ return '';
+ }
+ }
+
+ // Don't render the block's subtree if it has no label.
+ if ( empty( $attributes['label'] ) ) {
+ return '';
+ }
+
+ $colors = block_core_navigation_link_build_css_colors( $block->context, $attributes );
+ $font_sizes = block_core_navigation_link_build_css_font_sizes( $block->context );
+ $classes = array_merge(
+ $colors['css_classes'],
+ $font_sizes['css_classes']
+ );
+ $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );
+
+ $css_classes = trim( implode( ' ', $classes ) );
+ $has_submenu = count( $block->inner_blocks ) > 0;
+ $is_active = ! empty( $attributes['id'] ) && ( get_the_ID() === $attributes['id'] );
+
+ $wrapper_attributes = get_block_wrapper_attributes(
+ array(
+ 'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
+ ( $is_active ? ' current-menu-item' : '' ),
+ 'style' => $style_attribute,
+ )
+ );
+ $html = '<li ' . $wrapper_attributes . '>' .
+ '<a class="wp-block-navigation-item__content" ';
+
+ // Start appending HTML attributes to anchor tag.
+ if ( isset( $attributes['url'] ) ) {
+ $html .= ' href="' . esc_url( $attributes['url'] ) . '"';
+ }
+
+ if ( $is_active ) {
+ $html .= ' aria-current="page"';
+ }
+
+ if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
+ $html .= ' target="_blank" ';
+ }
+
+ if ( isset( $attributes['rel'] ) ) {
+ $html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
+ } elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
+ $html .= ' rel="nofollow"';
+ }
+
+ if ( isset( $attributes['title'] ) ) {
+ $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
+ }
+
+ // End appending HTML attributes to anchor tag.
+
+ // Start anchor tag content.
+ $html .= '>' .
+ // Wrap title with span to isolate it from submenu icon.
+ '<span class="wp-block-navigation-item__label">';
+
+ if ( isset( $attributes['label'] ) ) {
+ $html .= wp_kses(
+ $attributes['label'],
+ array(
+ 'code' => array(),
+ 'em' => array(),
+ 'img' => array(
+ 'scale' => array(),
+ 'class' => array(),
+ 'style' => array(),
+ 'src' => array(),
+ 'alt' => array(),
+ ),
+ 's' => array(),
+ 'span' => array(
+ 'style' => array(),
+ ),
+ 'strong' => array(),
+ )
+ );
+ }
+
+ $html .= '</span>';
+
+ if ( isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'] && $has_submenu ) {
+ // The submenu icon can be hidden by a CSS rule on the Navigation Block.
+ $html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_link_render_submenu_icon() . '</span>';
+ }
+
+ $html .= '</a>';
+ // End anchor tag content.
+
+ if ( $has_submenu ) {
+ $inner_blocks_html = '';
+ foreach ( $block->inner_blocks as $inner_block ) {
+ $inner_blocks_html .= $inner_block->render();
+ }
+
+ $html .= sprintf(
+ '<ul class="wp-block-navigation__submenu-container">%s</ul>',
+ $inner_blocks_html
+ );
+ }
+
+ $html .= '</li>';
+
+ return $html;
+}
+
+/**
+ * Returns a navigation link variation
+ *
+ * @param WP_Taxonomy|WP_Post_Type $entity post type or taxonomy entity.
+ * @param string $kind string of value 'taxonomy' or 'post-type'.
+ *
+ * @return array
+ */
+function build_variation_for_navigation_link( $entity, $kind ) {
+ $title = '';
+ $description = '';
+
+ if ( property_exists( $entity->labels, 'item_link' ) ) {
+ $title = $entity->labels->item_link;
+ }
+ if ( property_exists( $entity->labels, 'item_link_description' ) ) {
+ $description = $entity->labels->item_link_description;
+ }
+
+ $variation = array(
+ 'name' => $entity->name,
+ 'title' => $title,
+ 'description' => $description,
+ 'attributes' => array(
+ 'type' => $entity->name,
+ 'kind' => $kind,
+ ),
+ );
+
+ // Tweak some value for the variations.
+ $variation_overrides = array(
+ 'post_tag' => array(
+ 'name' => 'tag',
+ 'attributes' => array(
+ 'type' => 'tag',
+ 'kind' => $kind,
+ ),
+ ),
+ 'post_format' => array(
+ // The item_link and item_link_description for post formats is the
+ // same as for tags, so need to be overridden.
+ 'title' => __( 'Post Format Link' ),
+ 'description' => __( 'A link to a post format' ),
+ 'attributes' => array(
+ 'type' => 'post_format',
+ 'kind' => $kind,
+ ),
+ ),
+ );
+
+ if ( array_key_exists( $entity->name, $variation_overrides ) ) {
+ $variation = array_merge(
+ $variation,
+ $variation_overrides[ $entity->name ]
+ );
+ }
+
+ return $variation;
+}
+
+/**
+ * Register the navigation link block.
+ *
+ * @uses render_block_core_navigation()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation_link() {
+ $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
+ $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'objects' );
+
+ // Use two separate arrays as a way to order the variations in the UI.
+ // Known variations (like Post Link and Page Link) are added to the
+ // `built_ins` array. Variations for custom post types and taxonomies are
+ // added to the `variations` array and will always appear after `built-ins.
+ $built_ins = array();
+ $variations = array();
+
+ if ( $post_types ) {
+ foreach ( $post_types as $post_type ) {
+ $variation = build_variation_for_navigation_link( $post_type, 'post-type' );
+ if ( $post_type->_builtin ) {
+ $built_ins[] = $variation;
+ } else {
+ $variations[] = $variation;
+ }
+ }
+ }
+ if ( $taxonomies ) {
+ foreach ( $taxonomies as $taxonomy ) {
+ $variation = build_variation_for_navigation_link( $taxonomy, 'taxonomy' );
+ if ( $taxonomy->_builtin ) {
+ $built_ins[] = $variation;
+ } else {
+ $variations[] = $variation;
+ }
+ }
+ }
+
+ register_block_type_from_metadata(
+ __DIR__ . '/navigation-link',
+ array(
+ 'render_callback' => 'render_block_core_navigation_link',
+ 'variations' => array_merge( $built_ins, $variations ),
+ )
+ );
+}
+add_action( 'init', 'register_block_core_navigation_link' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-link.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationsubmenublockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-submenu/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-submenu/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-submenu/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,65 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/navigation-submenu",
+ "title": "Submenu",
+ "category": "design",
+ "parent": [
+ "core/navigation"
+ ],
+ "description": "Add a submenu to your navigation.",
+ "textdomain": "default",
+ "attributes": {
+ "label": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "rel": {
+ "type": "string"
+ },
+ "id": {
+ "type": "number"
+ },
+ "opensInNewTab": {
+ "type": "boolean",
+ "default": false
+ },
+ "url": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "string"
+ },
+ "isTopLevelItem": {
+ "type": "boolean"
+ }
+ },
+ "usesContext": [
+ "textColor",
+ "customTextColor",
+ "backgroundColor",
+ "customBackgroundColor",
+ "overlayTextColor",
+ "customOverlayTextColor",
+ "overlayBackgroundColor",
+ "customOverlayBackgroundColor",
+ "fontSize",
+ "customFontSize",
+ "showSubmenuIcon",
+ "openSubmenusOnClick",
+ "style"
+ ],
+ "supports": {
+ "reusable": false,
+ "html": false
+ },
+ "editorStyle": "wp-block-navigation-submenu-editor",
+ "style": "wp-block-navigation-submenu"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-submenu/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationsubmenuphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-submenu.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-submenu.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-submenu.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,300 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-submenu` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $context Navigation block context.
+ * @param array $attributes Block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_submenu_build_css_colors( $context, $attributes ) {
+ $colors = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ $is_sub_menu = isset( $attributes['isTopLevelLink'] ) ? ( ! $attributes['isTopLevelLink'] ) : false;
+
+ // Text color.
+ $named_text_color = null;
+ $custom_text_color = null;
+
+ if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) {
+ $custom_text_color = $context['customOverlayTextColor'];
+ } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) {
+ $named_text_color = $context['overlayTextColor'];
+ } elseif ( array_key_exists( 'customTextColor', $context ) ) {
+ $custom_text_color = $context['customTextColor'];
+ } elseif ( array_key_exists( 'textColor', $context ) ) {
+ $named_text_color = $context['textColor'];
+ } elseif ( isset( $context['style']['color']['text'] ) ) {
+ $custom_text_color = $context['style']['color']['text'];
+ }
+
+ // If has text color.
+ if ( ! is_null( $named_text_color ) ) {
+ // Add the color class.
+ array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) );
+ } elseif ( ! is_null( $custom_text_color ) ) {
+ // Add the custom color inline style.
+ $colors['css_classes'][] = 'has-text-color';
+ $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color );
+ }
+
+ // Background color.
+ $named_background_color = null;
+ $custom_background_color = null;
+
+ if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) {
+ $custom_background_color = $context['customOverlayBackgroundColor'];
+ } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) {
+ $named_background_color = $context['overlayBackgroundColor'];
+ } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) {
+ $custom_background_color = $context['customBackgroundColor'];
+ } elseif ( array_key_exists( 'backgroundColor', $context ) ) {
+ $named_background_color = $context['backgroundColor'];
+ } elseif ( isset( $context['style']['color']['background'] ) ) {
+ $custom_background_color = $context['style']['color']['background'];
+ }
+
+ // If has background color.
+ if ( ! is_null( $named_background_color ) ) {
+ // Add the background-color class.
+ array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) );
+ } elseif ( ! is_null( $custom_background_color ) ) {
+ // Add the custom background-color inline style.
+ $colors['css_classes'][] = 'has-background';
+ $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color );
+ }
+
+ return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $context Navigation block context.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_submenu_build_css_font_sizes( $context ) {
+ // CSS classes.
+ $font_sizes = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ $has_named_font_size = array_key_exists( 'fontSize', $context );
+ $has_custom_font_size = isset( $context['style']['typography']['fontSize'] );
+
+ if ( $has_named_font_size ) {
+ // Add the font size class.
+ $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
+ } elseif ( $has_custom_font_size ) {
+ // Add the custom font size inline style.
+ $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $context['style']['typography']['fontSize'] );
+ }
+
+ return $font_sizes;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_submenu_render_submenu_icon() {
+ return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation-submenu` block.
+ *
+ * @param array $attributes The block attributes.
+ * @param string $content The saved content.
+ * @param object $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation_submenu( $attributes, $content, $block ) {
+
+ $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
+ $is_post_type = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
+ $is_post_type = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );
+
+ // Don't render the block's subtree if it is a draft.
+ if ( $is_post_type && $navigation_link_has_id && 'publish' !== get_post_status( $attributes['id'] ) ) {
+ return '';
+ }
+
+ // Don't render the block's subtree if it has no label.
+ if ( empty( $attributes['label'] ) ) {
+ return '';
+ }
+
+ $colors = block_core_navigation_submenu_build_css_colors( $block->context, $attributes );
+ $font_sizes = block_core_navigation_submenu_build_css_font_sizes( $block->context );
+ $classes = array_merge(
+ $colors['css_classes'],
+ $font_sizes['css_classes']
+ );
+ $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );
+
+ $css_classes = trim( implode( ' ', $classes ) );
+ $has_submenu = count( $block->inner_blocks ) > 0;
+ $is_active = ! empty( $attributes['id'] ) && ( get_the_ID() === $attributes['id'] );
+
+ $class_name = ! empty( $attributes['className'] ) ? implode( ' ', (array) $attributes['className'] ) : false;
+
+ if ( false !== $class_name ) {
+ $css_classes .= ' ' . $class_name;
+ }
+
+ $show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'];
+ $open_on_click = isset( $block->context['openSubmenusOnClick'] ) && $block->context['openSubmenusOnClick'];
+ $open_on_hover_and_click = isset( $block->context['openSubmenusOnClick'] ) && ! $block->context['openSubmenusOnClick'] &&
+ $show_submenu_indicators;
+
+ $wrapper_attributes = get_block_wrapper_attributes(
+ array(
+ 'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
+ ( $open_on_click ? ' open-on-click' : '' ) . ( $open_on_hover_and_click ? ' open-on-hover-click' : '' ) .
+ ( $is_active ? ' current-menu-item' : '' ),
+ 'style' => $style_attribute,
+ )
+ );
+ $html = '<li ' . $wrapper_attributes . '>';
+
+ // If Submenus open on hover, we render an anchor tag with attributes.
+ // If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click.
+ if ( ! $open_on_click ) {
+ $item_url = isset( $attributes['url'] ) ? esc_url( $attributes['url'] ) : '';
+ // Start appending HTML attributes to anchor tag.
+ $html .= '<a class="wp-block-navigation-item__content" href="' . $item_url . '"';
+
+ if ( $is_active ) {
+ $html .= ' aria-current="page"';
+ }
+
+ if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
+ $html .= ' target="_blank" ';
+ }
+
+ if ( isset( $attributes['rel'] ) ) {
+ $html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
+ } elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
+ $html .= ' rel="nofollow"';
+ }
+
+ if ( isset( $attributes['title'] ) ) {
+ $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
+ }
+
+ $html .= '>';
+ // End appending HTML attributes to anchor tag.
+
+ if ( isset( $attributes['label'] ) ) {
+ $html .= wp_kses(
+ $attributes['label'],
+ array(
+ 'code' => array(),
+ 'em' => array(),
+ 'img' => array(
+ 'scale' => array(),
+ 'class' => array(),
+ 'style' => array(),
+ 'src' => array(),
+ 'alt' => array(),
+ ),
+ 's' => array(),
+ 'span' => array(
+ 'style' => array(),
+ ),
+ 'strong' => array(),
+ )
+ );
+ }
+
+ $html .= '</a>';
+ // End anchor tag content.
+
+ if ( $show_submenu_indicators ) {
+ // The submenu icon is rendered in a button here
+ // so that there's a clickable elment to open the submenu.
+ $html .= '<button class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" aria-expanded="false">' . block_core_navigation_submenu_render_submenu_icon() . '</button>';
+ }
+ } else {
+ // If menus open on click, we render the parent as a button.
+ $html .= '<button class="wp-block-navigation-item__content wp-block-navigation-submenu__toggle" aria-expanded="false">';
+
+ // Wrap title with span to isolate it from submenu icon.
+ $html .= '<span class="wp-block-navigation-item__label">';
+
+ if ( isset( $attributes['label'] ) ) {
+ $html .= wp_kses(
+ $attributes['label'],
+ array(
+ 'code' => array(),
+ 'em' => array(),
+ 'img' => array(
+ 'scale' => array(),
+ 'class' => array(),
+ 'style' => array(),
+ 'src' => array(),
+ 'alt' => array(),
+ ),
+ 's' => array(),
+ 'span' => array(
+ 'style' => array(),
+ ),
+ 'strong' => array(),
+ )
+ );
+ }
+
+ $html .= '</span>';
+
+ $html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_submenu_render_submenu_icon() . '</span>';
+
+ $html .= '</button>';
+
+ }
+
+ if ( $has_submenu ) {
+ $inner_blocks_html = '';
+ foreach ( $block->inner_blocks as $inner_block ) {
+ $inner_blocks_html .= $inner_block->render();
+ }
+
+ $html .= sprintf(
+ '<ul class="wp-block-navigation__submenu-container">%s</ul>',
+ $inner_blocks_html
+ );
+ }
+
+ $html .= '</li>';
+
+ return $html;
+}
+
+/**
+ * Register the navigation submenu block.
+ *
+ * @uses render_block_core_navigation_submenu()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation_submenu() {
+ register_block_type_from_metadata(
+ __DIR__ . '/navigation-submenu',
+ array(
+ 'render_callback' => 'render_block_core_navigation_submenu',
+ )
+ );
+}
+add_action( 'init', 'register_block_core_navigation_submenu' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-submenu.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation.php (rev 0)
+++ trunk/src/wp-includes/blocks/navigation.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,429 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $attributes Navigation block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_build_css_colors( $attributes ) {
+ $colors = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ // Text color.
+ $has_named_text_color = array_key_exists( 'textColor', $attributes );
+ $has_custom_text_color = array_key_exists( 'customTextColor', $attributes );
+
+ // If has text color.
+ if ( $has_custom_text_color || $has_named_text_color ) {
+ // Add has-text-color class.
+ $colors['css_classes'][] = 'has-text-color';
+ }
+
+ if ( $has_named_text_color ) {
+ // Add the color class.
+ $colors['css_classes'][] = sprintf( 'has-%s-color', $attributes['textColor'] );
+ } elseif ( $has_custom_text_color ) {
+ // Add the custom color inline style.
+ $colors['inline_styles'] .= sprintf( 'color: %s;', $attributes['customTextColor'] );
+ }
+
+ // Background color.
+ $has_named_background_color = array_key_exists( 'backgroundColor', $attributes );
+ $has_custom_background_color = array_key_exists( 'customBackgroundColor', $attributes );
+
+ // If has background color.
+ if ( $has_custom_background_color || $has_named_background_color ) {
+ // Add has-background class.
+ $colors['css_classes'][] = 'has-background';
+ }
+
+ if ( $has_named_background_color ) {
+ // Add the background-color class.
+ $colors['css_classes'][] = sprintf( 'has-%s-background-color', $attributes['backgroundColor'] );
+ } elseif ( $has_custom_background_color ) {
+ // Add the custom background-color inline style.
+ $colors['inline_styles'] .= sprintf( 'background-color: %s;', $attributes['customBackgroundColor'] );
+ }
+
+ return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param array $attributes Navigation block attributes.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_build_css_font_sizes( $attributes ) {
+ // CSS classes.
+ $font_sizes = array(
+ 'css_classes' => array(),
+ 'inline_styles' => '',
+ );
+
+ $has_named_font_size = array_key_exists( 'fontSize', $attributes );
+ $has_custom_font_size = array_key_exists( 'customFontSize', $attributes );
+
+ if ( $has_named_font_size ) {
+ // Add the font size class.
+ $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $attributes['fontSize'] );
+ } elseif ( $has_custom_font_size ) {
+ // Add the custom font size inline style.
+ $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $attributes['customFontSize'] );
+ }
+
+ return $font_sizes;
+}
+
+/**
+ * Returns the menu items for a WordPress menu location.
+ *
+ * @param string $location The menu location.
+ * @return array Menu items for the location.
+ */
+function gutenberg_get_menu_items_at_location( $location ) {
+ if ( empty( $location ) ) {
+ return;
+ }
+
+ // Build menu data. The following approximates the code in
+ // `wp_nav_menu()` and `gutenberg_output_block_nav_menu`.
+
+ // Find the location in the list of locations, returning early if the
+ // location can't be found.
+ $locations = get_nav_menu_locations();
+ if ( ! isset( $locations[ $location ] ) ) {
+ return;
+ }
+
+ // Get the menu from the location, returning early if there is no
+ // menu or there was an error.
+ $menu = wp_get_nav_menu_object( $locations[ $location ] );
+ if ( ! $menu || is_wp_error( $menu ) ) {
+ return;
+ }
+
+ $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
+ _wp_menu_item_classes_by_context( $menu_items );
+
+ return $menu_items;
+}
+
+/**
+ * Sorts a standard array of menu items into a nested structure keyed by the
+ * id of the parent menu.
+ *
+ * @param array $menu_items Menu items to sort.
+ * @return array An array keyed by the id of the parent menu where each element
+ * is an array of menu items that belong to that parent.
+ */
+function gutenberg_sort_menu_items_by_parent_id( $menu_items ) {
+ $sorted_menu_items = array();
+ foreach ( (array) $menu_items as $menu_item ) {
+ $sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
+ }
+ unset( $menu_items, $menu_item );
+
+ $menu_items_by_parent_id = array();
+ foreach ( $sorted_menu_items as $menu_item ) {
+ $menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
+ }
+
+ return $menu_items_by_parent_id;
+}
+
+/**
+ * Turns menu item data into a nested array of parsed blocks
+ *
+ * @param array $menu_items An array of menu items that represent
+ * an individual level of a menu.
+ * @param array $menu_items_by_parent_id An array keyed by the id of the
+ * parent menu where each element is an
+ * array of menu items that belong to
+ * that parent.
+ * @return array An array of parsed block data.
+ */
+function gutenberg_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
+ if ( empty( $menu_items ) ) {
+ return array();
+ }
+
+ $blocks = array();
+
+ foreach ( $menu_items as $menu_item ) {
+ $class_name = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
+ $id = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
+ $opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
+ $rel = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
+ $kind = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
+
+ $block = array(
+ 'blockName' => 'core/navigation-link',
+ 'attrs' => array(
+ 'className' => $class_name,
+ 'description' => $menu_item->description,
+ 'id' => $id,
+ 'kind' => $kind,
+ 'label' => $menu_item->title,
+ 'opensInNewTab' => $opens_in_new_tab,
+ 'rel' => $rel,
+ 'title' => $menu_item->attr_title,
+ 'type' => $menu_item->object,
+ 'url' => $menu_item->url,
+ ),
+ );
+
+ $block['innerBlocks'] = gutenberg_parse_blocks_from_menu_items(
+ isset( $menu_items_by_parent_id[ $menu_item->ID ] )
+ ? $menu_items_by_parent_id[ $menu_item->ID ]
+ : array(),
+ $menu_items_by_parent_id
+ );
+
+ $blocks[] = $block;
+ }
+
+ return $blocks;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_render_submenu_icon() {
+ return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation` block on server.
+ *
+ * @param array $attributes The block attributes.
+ * @param array $content The saved content.
+ * @param array $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation( $attributes, $content, $block ) {
+ /**
+ * Deprecated:
+ * The rgbTextColor and rgbBackgroundColor attributes
+ * have been deprecated in favor of
+ * customTextColor and customBackgroundColor ones.
+ * Move the values from old attrs to the new ones.
+ */
+ if ( isset( $attributes['rgbTextColor'] ) && empty( $attributes['textColor'] ) ) {
+ $attributes['customTextColor'] = $attributes['rgbTextColor'];
+ }
+
+ if ( isset( $attributes['rgbBackgroundColor'] ) && empty( $attributes['backgroundColor'] ) ) {
+ $attributes['customBackgroundColor'] = $attributes['rgbBackgroundColor'];
+ }
+
+ unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] );
+
+ /**
+ * This is for backwards compatibility after `isResponsive` attribute has been removed.
+ */
+ $has_old_responsive_attribute = ! empty( $attributes['isResponsive'] ) && $attributes['isResponsive'];
+ $is_responsive_menu = isset( $attributes['overlayMenu'] ) && 'never' !== $attributes['overlayMenu'] || $has_old_responsive_attribute;
+ $should_load_view_script = ! wp_script_is( 'wp-block-navigation-view' ) && ( $is_responsive_menu || $attributes['openSubmenusOnClick'] || $attributes['showSubmenuIcon'] );
+ if ( $should_load_view_script ) {
+ wp_enqueue_script( 'wp-block-navigation-view' );
+ }
+
+ $inner_blocks = $block->inner_blocks;
+
+ // If `__unstableLocation` is defined, create inner blocks from the classic menu assigned to that location.
+ if ( empty( $inner_blocks ) && array_key_exists( '__unstableLocation', $attributes ) ) {
+ $menu_items = gutenberg_get_menu_items_at_location( $attributes['__unstableLocation'] );
+ if ( empty( $menu_items ) ) {
+ return '';
+ }
+
+ $menu_items_by_parent_id = gutenberg_sort_menu_items_by_parent_id( $menu_items );
+ $parsed_blocks = gutenberg_parse_blocks_from_menu_items( $menu_items_by_parent_id[0], $menu_items_by_parent_id );
+ $inner_blocks = new WP_Block_List( $parsed_blocks, $attributes );
+ }
+
+ if ( ! empty( $block->context['navigationArea'] ) ) {
+ $area = $block->context['navigationArea'];
+ $mapping = get_option( 'fse_navigation_areas', array() );
+ if ( ! empty( $mapping[ $area ] ) ) {
+ $attributes['navigationMenuId'] = $mapping[ $area ];
+ }
+ }
+
+ // Load inner blocks from the navigation post.
+ if ( array_key_exists( 'navigationMenuId', $attributes ) ) {
+ $navigation_post = get_post( $attributes['navigationMenuId'] );
+ if ( ! isset( $navigation_post ) ) {
+ return '';
+ }
+
+ $parsed_blocks = parse_blocks( $navigation_post->post_content );
+
+ // 'parse_blocks' includes a null block with '\n\n' as the content when
+ // it encounters whitespace. This code strips it.
+ $compacted_blocks = array_filter(
+ $parsed_blocks,
+ function( $block ) {
+ return isset( $block['blockName'] );
+ }
+ );
+
+ // TODO - this uses the full navigation block attributes for the
+ // context which could be refined.
+ $inner_blocks = new WP_Block_List( $compacted_blocks, $attributes );
+ }
+
+ if ( empty( $inner_blocks ) ) {
+ return '';
+ }
+ $colors = block_core_navigation_build_css_colors( $attributes );
+ $font_sizes = block_core_navigation_build_css_font_sizes( $attributes );
+ $classes = array_merge(
+ $colors['css_classes'],
+ $font_sizes['css_classes'],
+ $is_responsive_menu ? array( 'is-responsive' ) : array()
+ );
+
+ $inner_blocks_html = '';
+ $is_list_open = false;
+ foreach ( $inner_blocks as $inner_block ) {
+ if ( ( 'core/navigation-link' === $inner_block->name || 'core/home-link' === $inner_block->name || 'core/site-title' === $inner_block->name || 'core/site-logo' === $inner_block->name || 'core/navigation-submenu' === $inner_block->name ) && ! $is_list_open ) {
+ $is_list_open = true;
+ $inner_blocks_html .= '<ul class="wp-block-navigation__container">';
+ }
+ if ( 'core/navigation-link' !== $inner_block->name && 'core/home-link' !== $inner_block->name && 'core/site-title' !== $inner_block->name && 'core/site-logo' !== $inner_block->name && 'core/navigation-submenu' !== $inner_block->name && $is_list_open ) {
+ $is_list_open = false;
+ $inner_blocks_html .= '</ul>';
+ }
+ if ( 'core/site-title' === $inner_block->name || 'core/site-logo' === $inner_block->name ) {
+ $inner_blocks_html .= '<li class="wp-block-navigation-item">' . $inner_block->render() . '</li>';
+ } else {
+ $inner_blocks_html .= $inner_block->render();
+ }
+ }
+
+ if ( $is_list_open ) {
+ $inner_blocks_html .= '</ul>';
+ }
+
+ $block_styles = isset( $attributes['styles'] ) ? $attributes['styles'] : '';
+
+ $wrapper_attributes = get_block_wrapper_attributes(
+ array(
+ 'class' => implode( ' ', $classes ),
+ 'style' => $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles'],
+ )
+ );
+
+ $modal_unique_id = uniqid();
+
+ // Determine whether or not navigation elements should be wrapped in the markup required to make it responsive,
+ // return early if they don't.
+ if ( ! $is_responsive_menu ) {
+ return sprintf(
+ '<nav %1$s>%2$s</nav>',
+ $wrapper_attributes,
+ $inner_blocks_html
+ );
+ }
+
+ $is_hidden_by_default = isset( $attributes['overlayMenu'] ) && 'always' === $attributes['overlayMenu'];
+
+ $responsive_container_classes = array(
+ 'wp-block-navigation__responsive-container',
+ $is_hidden_by_default ? 'hidden-by-default' : '',
+ );
+ $open_button_classes = array(
+ 'wp-block-navigation__responsive-container-open',
+ $is_hidden_by_default ? 'always-shown' : '',
+ );
+
+ $responsive_container_markup = sprintf(
+ '<button aria-expanded="false" aria-haspopup="true" aria-label="%3$s" class="%6$s" data-micromodal-trigger="modal-%1$s"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img" aria-hidden="true" focusable="false"><rect x="4" y="7.5" width="16" height="1.5" /><rect x="4" y="15" width="16" height="1.5" /></svg></button>
+ <div class="%5$s" id="modal-%1$s" aria-hidden="true">
+ <div class="wp-block-navigation__responsive-close" tabindex="-1" data-micromodal-close>
+ <div class="wp-block-navigation__responsive-dialog" role="dialog" aria-modal="true" aria-labelledby="modal-%1$s-title" >
+ <button aria-label="%4$s" data-micromodal-close class="wp-block-navigation__responsive-container-close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg></button>
+ <div class="wp-block-navigation__responsive-container-content" id="modal-%1$s-content">
+ %2$s
+ </div>
+ </div>
+ </div>
+ </div>',
+ $modal_unique_id,
+ $inner_blocks_html,
+ __( 'Open menu' ), // Open button label.
+ __( 'Close menu' ), // Close button label.
+ implode( ' ', $responsive_container_classes ),
+ implode( ' ', $open_button_classes )
+ );
+
+ return sprintf(
+ '<nav %1$s>%2$s</nav>',
+ $wrapper_attributes,
+ $responsive_container_markup
+ );
+}
+
+/**
+ * Register the navigation block.
+ *
+ * @uses render_block_core_navigation()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation() {
+ register_block_type_from_metadata(
+ __DIR__ . '/navigation',
+ array(
+ 'render_callback' => 'render_block_core_navigation',
+ )
+ );
+}
+
+add_action( 'init', 'register_block_core_navigation' );
+
+/**
+ * Filter that changes the parsed attribute values of navigation blocks contain typographic presets to contain the values directly.
+ *
+ * @param array $parsed_block The block being rendered.
+ * @return array The block being rendered without typographic presets.
+ */
+function block_core_navigation_typographic_presets_backcompatibility( $parsed_block ) {
+ if ( 'core/navigation' === $parsed_block['blockName'] ) {
+ $attribute_to_prefix_map = array(
+ 'fontStyle' => 'var:preset|font-style|',
+ 'fontWeight' => 'var:preset|font-weight|',
+ 'textDecoration' => 'var:preset|text-decoration|',
+ 'textTransform' => 'var:preset|text-transform|',
+ );
+ foreach ( $attribute_to_prefix_map as $style_attribute => $prefix ) {
+ if ( ! empty( $parsed_block['attrs']['style']['typography'][ $style_attribute ] ) ) {
+ $prefix_len = strlen( $prefix );
+ $attribute_value = &$parsed_block['attrs']['style']['typography'][ $style_attribute ];
+ if ( 0 === strncmp( $attribute_value, $prefix, $prefix_len ) ) {
+ $attribute_value = substr( $attribute_value, $prefix_len );
+ }
+ if ( 'textDecoration' === $style_attribute && 'strikethrough' === $attribute_value ) {
+ $attribute_value = 'line-through';
+ }
+ }
+ }
+ }
+ return $parsed_block;
+}
+
+add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspatternblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/pattern/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/pattern/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/pattern/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,17 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/pattern",
+ "title": "Pattern",
+ "category": "design",
+ "description": "Show a block pattern.",
+ "supports": {
+ "html": false,
+ "inserter": false
+ },
+ "textdomain": "default",
+ "attributes": {
+ "slug": {
+ "type": "string"
+ }
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/pattern/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspatternphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/pattern.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/pattern.php (rev 0)
+++ trunk/src/wp-includes/blocks/pattern.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,44 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/pattern` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Registers the `core/pattern` block on the server.
+ *
+ * @return void
+ */
+function register_block_core_pattern() {
+ register_block_type_from_metadata(
+ __DIR__ . '/pattern',
+ array(
+ 'render_callback' => 'render_block_core_pattern',
+ )
+ );
+}
+
+/**
+ * Renders the `core/pattern` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ *
+ * @return string Returns the output of the pattern.
+ */
+function render_block_core_pattern( $attributes ) {
+ if ( empty( $attributes['slug'] ) ) {
+ return '';
+ }
+
+ $slug = $attributes['slug'];
+ $registry = WP_Block_Patterns_Registry::get_instance();
+ if ( ! $registry->is_registered( $slug ) ) {
+ return '';
+ }
+
+ $pattern = $registry->get_registered( $slug );
+ return do_blocks( $pattern['content'] );
+}
+
+add_action( 'init', 'register_block_core_pattern' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/pattern.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostauthorblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-author/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-author/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/post-author/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,53 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/post-author",
+ "title": "Post Author",
+ "category": "theme",
+ "description": "Add the author of this post.",
+ "textdomain": "default",
+ "attributes": {
+ "textAlign": {
+ "type": "string"
+ },
+ "avatarSize": {
+ "type": "number",
+ "default": 48
+ },
+ "showAvatar": {
+ "type": "boolean",
+ "default": true
+ },
+ "showBio": {
+ "type": "boolean"
+ },
+ "byline": {
+ "type": "string"
+ }
+ },
+ "usesContext": [ "postType", "postId", "queryId" ],
+ "supports": {
+ "html": false,
+ "spacing": {
+ "margin": true,
+ "padding": true
+ },
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalFontStyle": true,
+ "__experimentalFontWeight": true,
+ "__experimentalLetterSpacing": true,
+ "__experimentalTextTransform": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true
+ }
+ },
+ "color": {
+ "gradients": true,
+ "link": true,
+ "__experimentalDuotone": ".wp-block-post-author__avatar img"
+ }
+ },
+ "editorStyle": "wp-block-post-author-editor",
+ "style": "wp-block-post-author"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-author/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostauthorphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-author.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-author.php (rev 0)
+++ trunk/src/wp-includes/blocks/post-author.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,61 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-author` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-author` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ * @param string $content Block default content.
+ * @param WP_Block $block Block instance.
+ * @return string Returns the rendered author block.
+ */
+function render_block_core_post_author( $attributes, $content, $block ) {
+ if ( ! isset( $block->context['postId'] ) ) {
+ return '';
+ }
+
+ $author_id = get_post_field( 'post_author', $block->context['postId'] );
+ if ( empty( $author_id ) ) {
+ return '';
+ }
+
+ $avatar = ! empty( $attributes['avatarSize'] ) ? get_avatar(
+ $author_id,
+ $attributes['avatarSize']
+ ) : null;
+
+ $byline = ! empty( $attributes['byline'] ) ? $attributes['byline'] : false;
+ $classes = array_merge(
+ isset( $attributes['className'] ) ? array( $attributes['className'] ) : array(),
+ isset( $attributes['itemsJustification'] ) ? array( 'items-justified-' . $attributes['itemsJustification'] ) : array(),
+ isset( $attributes['textAlign'] ) ? array( 'has-text-align-' . $attributes['textAlign'] ) : array()
+ );
+
+ $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
+
+ return sprintf( '<div %1$s>', $wrapper_attributes ) .
+ ( ! empty( $attributes['showAvatar'] ) ? '<div class="wp-block-post-author__avatar">' . $avatar . '</div>' : '' ) .
+ '<div class="wp-block-post-author__content">' .
+ ( ! empty( $byline ) ? '<p class="wp-block-post-author__byline">' . $byline . '</p>' : '' ) .
+ '<p class="wp-block-post-author__name">' . get_the_author_meta( 'display_name', $author_id ) . '</p>' .
+ ( ! empty( $attributes['showBio'] ) ? '<p class="wp-block-post-author__bio">' . get_the_author_meta( 'user_description', $author_id ) . '</p>' : '' ) .
+ '</div>' .
+ '</div>';
+}
+
+/**
+ * Registers the `core/post-author` block on the server.
+ */
+function register_block_core_post_author() {
+ register_block_type_from_metadata(
+ __DIR__ . '/post-author',
+ array(
+ 'render_callback' => 'render_block_core_post_author',
+ )
+ );
+}
+add_action( 'init', 'register_block_core_post_author' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-author.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostcommentsblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-comments/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-comments/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/post-comments/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/post-comments",
+ "title": "Post Comments",
+ "category": "theme",
+ "description": "Display a post's comments.",
+ "textdomain": "default",
+ "attributes": {
+ "textAlign": {
+ "type": "string"
+ }
+ },
+ "usesContext": [ "postId", "postType" ],
+ "supports": {
+ "html": false,
+ "align": [ "wide", "full" ],
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalFontStyle": true,
+ "__experimentalFontWeight": true,
+ "__experimentalLetterSpacing": true,
+ "__experimentalTextTransform": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true
+ }
+ },
+ "color": {
+ "gradients": true,
+ "link": true
+ }
+ },
+ "style": "wp-block-post-comments"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-comments/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostcommentsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-comments.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-comments.php (rev 0)
+++ trunk/src/wp-includes/blocks/post-comments.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,68 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-comments` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-comments` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ * @param string $content Block default content.
+ * @param WP_Block $block Block instance.
+ * @return string Returns the filtered post comments for the current post wrapped inside "p" tags.
+ */
+function render_block_core_post_comments( $attributes, $content, $block ) {
+ global $post;
+
+ $post_id = $block->context['postId'];
+ if ( ! isset( $post_id ) ) {
+ return '';
+ }
+
+ $comment_args = array(
+ 'post_id' => $post_id,
+ 'count' => true,
+ );
+ // Return early if there are no comments and comments are closed.
+ if ( ! comments_open( $post_id ) && get_comments( $comment_args ) === 0 ) {
+ return '';
+ }
+
+ $post_before = $post;
+ $post = get_post( $post_id );
+ setup_postdata( $post );
+
+ ob_start();
+ // There's a deprecation warning generated by WP Core.
+ // Ideally this deprecation is removed from Core.
+ // In the meantime, this removes it from the output.
+ add_filter( 'deprecated_file_trigger_error', '__return_false' );
+ comments_template();
+ remove_filter( 'deprecated_file_trigger_error', '__return_false' );
+ $post = $post_before;
+
+ $classes = '';
+ if ( isset( $attributes['textAlign'] ) ) {
+ $classes .= 'has-text-align-' . $attributes['textAlign'];
+ }
+
+ $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
+ $output = ob_get_clean();
+
+ return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $output );
+}
+
+/**
+ * Registers the `core/post-comments` block on the server.
+ */
+function register_block_core_post_comments() {
+ register_block_type_from_metadata(
+ __DIR__ . '/post-comments',
+ array(
+ 'render_callback' => 'render_block_core_post_comments',
+ )
+ );
+}
+add_action( 'init', 'register_block_core_post_comments' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-comments.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostnavigationlinkblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-navigation-link/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-navigation-link/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/post-navigation-link/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,43 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/post-navigation-link",
+ "title": "Post Navigation Link",
+ "category": "theme",
+ "description": "Displays the next or previous post link that is adjacent to the current post.",
+ "textdomain": "default",
+ "attributes": {
+ "textAlign": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "default": "next"
+ },
+ "label": {
+ "type": "string"
+ },
+ "showTitle": {
+ "type": "boolean",
+ "default": false
+ },
+ "linkLabel": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "supports": {
+ "reusable": false,
+ "html": false,
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalFontStyle": true,
+ "__experimentalFontWeight": true,
+ "__experimentalLetterSpacing": true,
+ "__experimentalTextTransform": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true
+ }
+ }
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-navigation-link/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostnavigationlinkphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-navigation-link.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-navigation-link.php (rev 0)
+++ trunk/src/wp-includes/blocks/post-navigation-link.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,96 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-navigation-link` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-navigation-link` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ * @param string $content Block default content.
+ *
+ * @return string Returns the next or previous post link that is adjacent to the current post.
+ */
+function render_block_core_post_navigation_link( $attributes, $content ) {
+ if ( ! is_singular() ) {
+ return '';
+ }
+
+ // Get the nagigation type to show the proper link. Available options are `next|previous`.
+ $navigation_type = isset( $attributes['type'] ) ? $attributes['type'] : 'next';
+ // Allow only `next` and `previous` in `$navigation_type`.
+ if ( ! in_array( $navigation_type, array( 'next', 'previous' ), true ) ) {
+ return '';
+ }
+ $classes = "post-navigation-link-$navigation_type";
+ if ( isset( $attributes['textAlign'] ) ) {
+ $classes .= " has-text-align-{$attributes['textAlign']}";
+ }
+ $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
+ // Set default values.
+ $format = '%link';
+ $link = 'next' === $navigation_type ? _x( 'Next', 'label for next post link' ) : _x( 'Previous', 'label for previous post link' );
+ $label = '';
+
+ // If a custom label is provided, make this a link.
+ // `$label` is used to prepend the provided label, if we want to show the page title as well.
+ if ( isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ) {
+ $label = "{$attributes['label']}";
+ $link = $label;
+ }
+
+ // If we want to also show the page title, make the page title a link and prepend the label.
+ if ( isset( $attributes['showTitle'] ) && $attributes['showTitle'] ) {
+ /*
+ * If the label link option is not enabled but there is a custom label,
+ * display the custom label as text before the linked title.
+ */
+ if ( ! $attributes['linkLabel'] ) {
+ if ( $label ) {
+ $format = '<span class="post-navigation-link__label">' . $label . '</span> %link';
+ }
+ $link = '%title';
+ } elseif ( isset( $attributes['linkLabel'] ) && $attributes['linkLabel'] ) {
+ // If the label link option is enabled and there is a custom label, display it before the title.
+ if ( $label ) {
+ $link = '<span class="post-navigation-link__label">' . $label . '</span> <span class="post-navigation-link__title">%title</title>';
+ } else {
+ /*
+ * If the label link option is enabled and there is no custom label,
+ * add a colon between the label and the post title.
+ */
+ $label = 'next' === $navigation_type ? _x( 'Next:', 'label before the title of the next post' ) : _x( 'Previous:', 'label before the title of the previous post' );
+ $link = sprintf(
+ '<span class="post-navigation-link__label">%1$s</span> <span class="post-navigation-link__title">%2$s</span>',
+ $label,
+ '%title'
+ );
+ }
+ }
+ }
+
+ // The dynamic portion of the function name, `$navigation_type`,
+ // refers to the type of adjacency, 'next' or 'previous'.
+ $get_link_function = "get_{$navigation_type}_post_link";
+ $content = $get_link_function( $format, $link );
+ return sprintf(
+ '<div %1$s>%2$s</div>',
+ $wrapper_attributes,
+ $content
+ );
+}
+
+/**
+ * Registers the `core/post-navigation-link` block on the server.
+ */
+function register_block_core_post_navigation_link() {
+ register_block_type_from_metadata(
+ __DIR__ . '/post-navigation-link',
+ array(
+ 'render_callback' => 'render_block_core_post_navigation_link',
+ )
+ );
+}
+add_action( 'init', 'register_block_core_post_navigation_link' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-navigation-link.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockstermdescriptionblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/term-description/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/term-description/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/term-description/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,28 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/term-description",
+ "title": "Term Description",
+ "category": "theme",
+ "description": "Display the description of categories, tags and custom taxonomies when viewing an archive.",
+ "textdomain": "default",
+ "attributes": {
+ "textAlign": {
+ "type": "string"
+ }
+ },
+ "supports": {
+ "align": [ "wide", "full" ],
+ "html": false,
+ "color": {
+ "link": true
+ },
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true
+ }
+ }
+ },
+ "editorStyle": "wp-block-term-description-editor"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/term-description/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockstermdescriptionphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/term-description.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/term-description.php (rev 0)
+++ trunk/src/wp-includes/blocks/term-description.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,45 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/term-description` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/term-description` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ *
+ * @return string Returns the description of the current taxonomy term, if available
+ */
+function render_block_core_term_description( $attributes ) {
+ $term_description = '';
+
+ if ( is_category() || is_tag() || is_tax() ) {
+ $term_description = term_description();
+ }
+
+ if ( empty( $term_description ) ) {
+ return '';
+ }
+
+ $extra_attributes = ( isset( $attributes['textAlign'] ) )
+ ? array( 'class' => 'has-text-align-' . $attributes['textAlign'] )
+ : array();
+ $wrapper_attributes = get_block_wrapper_attributes( $extra_attributes );
+
+ return '<div ' . $wrapper_attributes . '>' . $term_description . '</div>';
+}
+
+/**
+ * Registers the `core/term-description` block on the server.
+ */
+function register_block_core_term_description() {
+ register_block_type_from_metadata(
+ __DIR__ . '/term-description',
+ array(
+ 'render_callback' => 'render_block_core_term_description',
+ )
+ );
+}
+add_action( 'init', 'register_block_core_term_description' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/term-description.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockswidgetgroupblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/widget-group/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/widget-group/block.json (rev 0)
+++ trunk/src/wp-includes/blocks/widget-group/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,18 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+ "apiVersion": 2,
+ "name": "core/widget-group",
+ "category": "widgets",
+ "attributes": {
+ "title": {
+ "type": "string"
+ }
+ },
+ "supports": {
+ "html": false,
+ "inserter": true,
+ "customClassName": true,
+ "reusable": false
+ },
+ "editorStyle": "wp-block-widget-group-editor",
+ "style": "wp-block-widget-group"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/widget-group/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockswidgetgroupphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/widget-group.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/widget-group.php (rev 0)
+++ trunk/src/wp-includes/blocks/widget-group.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,78 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/widget-group` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the 'core/widget-group' block.
+ *
+ * @param array $attributes The block attributes.
+ * @param string $content The block content.
+ * @param WP_Block $block The block.
+ *
+ * @return string Rendered block.
+ */
+function render_block_core_widget_group( $attributes, $content, $block ) {
+ global $wp_registered_sidebars, $_sidebar_being_rendered;
+
+ if ( isset( $wp_registered_sidebars[ $_sidebar_being_rendered ] ) ) {
+ $before_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['before_title'];
+ $after_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['after_title'];
+ } else {
+ $before_title = '<h2 class="widget-title">';
+ $after_title = '</h2>';
+ }
+
+ $html = '';
+
+ if ( ! empty( $attributes['title'] ) ) {
+ $html .= $before_title . $attributes['title'] . $after_title;
+ }
+
+ $html .= '<div class="wp-widget-group__inner-blocks">';
+ foreach ( $block->inner_blocks as $inner_block ) {
+ $html .= $inner_block->render();
+ }
+ $html .= '</div>';
+
+ return $html;
+}
+
+/**
+ * Registers the 'core/widget-group' block.
+ */
+function register_block_core_widget_group() {
+ register_block_type_from_metadata(
+ __DIR__ . '/widget-group',
+ array(
+ 'render_callback' => 'render_block_core_widget_group',
+ )
+ );
+}
+
+add_action( 'init', 'register_block_core_widget_group' );
+
+/**
+ * Make a note of the sidebar being rendered before WordPress starts rendering
+ * it. This lets us get to the current sidebar in
+ * render_block_core_widget_group().
+ *
+ * @param int|string $index Index, name, or ID of the dynamic sidebar.
+ */
+function note_sidebar_being_rendered( $index ) {
+ global $_sidebar_being_rendered;
+ $_sidebar_being_rendered = $index;
+}
+add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' );
+
+/**
+ * Clear whatever we set in note_sidebar_being_rendered() after WordPress
+ * finishes rendering a sidebar.
+ */
+function discard_sidebar_being_rendered() {
+ global $_sidebar_being_rendered;
+ unset( $_sidebar_being_rendered );
+}
+add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/widget-group.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksphp"></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/blocks.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/blocks.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1182,3 +1182,117 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> return null;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Enqueue a stylesheet for a specific block.
+ *
+ * If the theme has opted-in to separate-styles loading,
+ * then the stylesheet will be enqueued on-render,
+ * otherwise when the block inits.
+ *
+ * @param string $block_name The block-name, including namespace.
+ * @param array $args An array of arguments [handle,src,deps,ver,media].
+ *
+ * @return void
+ */
+function wp_enqueue_block_style( $block_name, $args ) {
+ $args = wp_parse_args(
+ $args,
+ array(
+ 'handle' => '',
+ 'src' => '',
+ 'deps' => array(),
+ 'ver' => false,
+ 'media' => 'all',
+ )
+ );
+
+ /**
+ * Callback function to register and enqueue styles.
+ *
+ * @param string $content When the callback is used for the render_block filter,
+ * the content needs to be returned so the function parameter
+ * is to ensure the content exists.
+ *
+ * @return string
+ */
+ $callback = static function( $content ) use ( $args ) {
+ // Register the stylesheet.
+ if ( ! empty( $args['src'] ) ) {
+ wp_register_style( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media'] );
+ }
+
+ // Add `path` data if provided.
+ if ( isset( $args['path'] ) ) {
+ wp_style_add_data( $args['handle'], 'path', $args['path'] );
+
+ // Get the RTL file path.
+ $rtl_file_path = str_replace( '.css', '-rtl.css', $args['path'] );
+
+ // Add RTL stylesheet.
+ if ( file_exists( $rtl_file_path ) ) {
+ wp_style_add_data( $args['hanle'], 'rtl', 'replace' );
+
+ if ( is_rtl() ) {
+ wp_style_add_data( $args['handle'], 'path', $rtl_file_path );
+ }
+ }
+ }
+
+ // Enqueue the stylesheet.
+ wp_enqueue_style( $args['handle'] );
+
+ return $content;
+ };
+
+ $hook = did_action( 'wp_enqueue_scripts' ) ? 'wp_footer' : 'wp_enqueue_scripts';
+ if ( wp_should_load_separate_core_block_assets() ) {
+ $hook = "render_block_$block_name";
+ }
+
+ /*
+ * The filter's callback here is an anonymous function because
+ * using a named function in this case is not possible.
+ *
+ * The function cannot be unhooked, however, users are still able
+ * to dequeue the stylesheets registered/enqueued by the callback
+ * which is why in this case, using an anonymous function
+ * was deemed acceptable.
+ */
+ add_filter( $hook, $callback );
+
+ // Enqueue assets in the editor.
+ add_action( 'enqueue_block_assets', $callback );
+}
+
+/**
+ * Allow multiple block styles.
+ *
+ * @param array $metadata Metadata for registering a block type.
+ *
+ * @return array
+ */
+function _wp_multiple_block_styles( $metadata ) {
+ foreach ( array( 'style', 'editorStyle' ) as $key ) {
+ if ( ! empty( $metadata[ $key ] ) && is_array( $metadata[ $key ] ) ) {
+ $default_style = array_shift( $metadata[ $key ] );
+ foreach ( $metadata[ $key ] as $handle ) {
+ $args = array( 'handle' => $handle );
+ if ( 0 === strpos( $handle, 'file:' ) && isset( $metadata['file'] ) ) {
+ $style_path = remove_block_asset_path_prefix( $handle );
+ $args = array(
+ 'handle' => sanitize_key( "{$metadata['name']}-{$style_path}" ),
+ 'src' => plugins_url( $style_path, $metadata['file'] ),
+ );
+ }
+
+ wp_enqueue_block_style( $metadata['name'], $args );
+ }
+
+ // Only return the 1st item in the array.
+ $metadata[ $key ] = $default_style;
+ }
+ }
+ return $metadata;
+}
+add_filter( 'block_type_metadata', '_wp_multiple_block_styles' );
</ins></span></pre></div>
<a id="trunksrcwpincludesdefaultfiltersphp"></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/default-filters.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/default-filters.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/default-filters.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -581,6 +581,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'admin_footer-post.php', 'wp_add_iframed_editor_assets_html' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'admin_footer-post-new.php', 'wp_add_iframed_editor_assets_html' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+add_action( 'admin_footer-widgets.php', 'wp_add_iframed_editor_assets_html' );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Taxonomy.
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'init', 'create_initial_taxonomies', 0 ); // Highest priority.
</span></span></pre></div>
<a id="trunksrcwpincludesksesphp"></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/kses.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/kses.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/kses.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2287,6 +2287,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-right-width',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-bottom',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-bottom-color',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'border-bottom-left-radius',
+ 'border-bottom-right-radius',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'border-bottom-style',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-bottom-width',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-bottom-right-radius',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2297,6 +2299,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-left-width',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-top',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-top-color',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'border-top-left-radius',
+ 'border-top-right-radius',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'border-top-style',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-top-width',
</span><span class="cx" style="display: block; padding: 0 10px"> 'border-top-left-radius',
</span></span></pre></div>
<a id="trunksrcwpincludespostphp"></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/post.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/post.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/post.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -450,6 +450,51 @@
</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">+ register_post_type(
+ 'wp_navigation',
+ array(
+ 'labels' => array(
+ 'name' => __( 'Navigation Menus', 'gutenberg' ),
+ 'singular_name' => __( 'Navigation Menu', 'gutenberg' ),
+ 'menu_name' => _x( 'Navigation Menus', 'Admin Menu text', 'gutenberg' ),
+ 'add_new' => _x( 'Add New', 'Navigation Menu', 'gutenberg' ),
+ 'add_new_item' => __( 'Add New Navigation Menu', 'gutenberg' ),
+ 'new_item' => __( 'New Navigation Menu', 'gutenberg' ),
+ 'edit_item' => __( 'Edit Navigation Menu', 'gutenberg' ),
+ 'view_item' => __( 'View Navigation Menu', 'gutenberg' ),
+ 'all_items' => __( 'All Navigation Menus', 'gutenberg' ),
+ 'search_items' => __( 'Search Navigation Menus', 'gutenberg' ),
+ 'parent_item_colon' => __( 'Parent Navigation Menu:', 'gutenberg' ),
+ 'not_found' => __( 'No Navigation Menu found.', 'gutenberg' ),
+ 'not_found_in_trash' => __( 'No Navigation Menu found in Trash.', 'gutenberg' ),
+ 'archives' => __( 'Navigation Menu archives', 'gutenberg' ),
+ 'insert_into_item' => __( 'Insert into Navigation Menu', 'gutenberg' ),
+ 'uploaded_to_this_item' => __( 'Uploaded to this Navigation Menu', 'gutenberg' ),
+ // Some of these are a bit weird, what are they for?
+ 'filter_items_list' => __( 'Filter Navigation Menu list', 'gutenberg' ),
+ 'items_list_navigation' => __( 'Navigation Menus list navigation', 'gutenberg' ),
+ 'items_list' => __( 'Navigation Menus list', 'gutenberg' ),
+ ),
+ 'description' => __( 'Navigation menus.', 'gutenberg' ),
+ 'public' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ 'has_archive' => false,
+ 'show_ui' => false,
+ 'show_in_menu' => 'themes.php',
+ 'show_in_admin_bar' => false,
+ 'show_in_rest' => true,
+ 'rewrite' => false,
+ 'map_meta_cap' => true,
+ 'rest_base' => 'navigation',
+ 'rest_controller_class' => 'WP_REST_Posts_Controller',
+ 'supports' => array(
+ 'title',
+ 'editor',
+ 'revisions',
+ ),
+ )
+ );
+
</ins><span class="cx" style="display: block; padding: 0 10px"> register_post_status(
</span><span class="cx" style="display: block; padding: 0 10px"> 'publish',
</span><span class="cx" style="display: block; padding: 0 10px"> array(
</span></span></pre></div>
<a id="trunksrcwpincludesrestapiendpointsclasswprestuserscontrollerphp"></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/rest-api/endpoints/class-wp-rest-users-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -311,6 +311,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $prepared_args['has_published_posts'] = get_post_types( array( 'show_in_rest' => true ), 'names' );
</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">+ if ( ! empty( $request['has_published_posts'] ) ) {
+ $prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] )
+ ? get_post_types( array( 'show_in_rest' => true ), 'names' )
+ : (array) $request['has_published_posts'];
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $prepared_args['search'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $prepared_args['search'] = '*' . $prepared_args['search'] . '*';
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1580,6 +1586,15 @@
</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">+ $query_params['has_published_posts'] = array(
+ 'description' => __( 'Limit result set to users who have published posts.' ),
+ 'type' => array( 'boolean', 'array' ),
+ 'items' => array(
+ 'type' => 'string',
+ 'enum' => get_post_types( array( 'show_in_rest' => true ), 'names' ),
+ ),
+ );
+
</ins><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters REST API collection parameters for the users controller.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span></span></pre></div>
<a id="trunksrcwpincludesrestapiendpointsclasswprestwidgettypescontrollerphp"></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/rest-api/endpoints/class-wp-rest-widget-types-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +99,29 @@
</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">+
+ register_rest_route(
+ $this->namespace,
+ '/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)/render',
+ array(
+ array(
+ 'methods' => WP_REST_Server::CREATABLE,
+ 'permission_callback' => array( $this, 'get_item_permissions_check' ),
+ 'callback' => array( $this, 'render' ),
+ 'args' => array(
+ 'id' => array(
+ 'description' => __( 'The widget type id.', 'default' ),
+ 'type' => 'string',
+ 'required' => true,
+ ),
+ 'instance' => array(
+ 'description' => __( 'Current instance settings of the widget.', 'default' ),
+ 'type' => 'object',
+ ),
+ ),
+ ),
+ )
+ );
</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">@@ -560,6 +583,78 @@
</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">+ * Renders a single Legacy Widget and wraps it in a JSON-encodable array.
+ *
+ * @since 5.9.0
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ *
+ * @return array An array with rendered Legacy Widget HTML.
+ */
+ public function render( $request ) {
+ return array(
+ 'preview' => $this->render_legacy_widget_preview_iframe(
+ $request['id'],
+ isset( $request['instance'] ) ? $request['instance'] : null
+ ),
+ );
+ }
+
+ /**
+ * Renders a page containing a preview of the requested Legacy Widget block.
+ *
+ * @since 5.9.0
+ *
+ * @param string $id_base The id base of the requested widget.
+ * @param array $instance The widget instance attributes.
+ *
+ * @return string Rendered Legacy Widget block preview.
+ */
+ private function render_legacy_widget_preview_iframe( $id_base, $instance ) {
+ if ( ! defined( 'IFRAME_REQUEST' ) ) {
+ define( 'IFRAME_REQUEST', true );
+ }
+
+ ob_start();
+ ?>
+ <!doctype html>
+ <html <?php language_attributes(); ?>>
+ <head>
+ <meta charset="<?php bloginfo( 'charset' ); ?>" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="profile" href="https://gmpg.org/xfn/11" />
+ <?php wp_head(); ?>
+ <style>
+ /* Reset theme styles */
+ html, body, #page, #content {
+ padding: 0 !important;
+ margin: 0 !important;
+ }
+ </style>
+ </head>
+ <body <?php body_class(); ?>>
+ <div id="page" class="site">
+ <div id="content" class="site-content">
+ <?php
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block = $registry->get_registered( 'core/legacy-widget' );
+ echo $block->render(
+ array(
+ 'idBase' => $id_base,
+ 'instance' => $instance,
+ )
+ );
+ ?>
+ </div><!-- #content -->
+ </div><!-- #page -->
+ <?php wp_footer(); ?>
+ </body>
+ </html>
+ <?php
+ return ob_get_clean();
+ }
+
+ /**
</ins><span class="cx" style="display: block; padding: 0 10px"> * Retrieves the query params for collections.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.8.0
</span></span></pre></div>
<a id="trunksrcwpincludesscriptloaderphp"></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/script-loader.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/script-loader.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/script-loader.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -103,8 +103,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"> $vendor_scripts_versions = array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'react' => '16.13.1',
- 'react-dom' => '16.13.1',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'react' => '17.0.1',
+ 'react-dom' => '17.0.1',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'regenerator-runtime' => '0.13.7',
</span><span class="cx" style="display: block; padding: 0 10px"> 'moment' => '2.29.1',
</span><span class="cx" style="display: block; padding: 0 10px"> 'lodash' => '4.17.19',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1598,6 +1598,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-block-library',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-reusable-blocks',
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'edit-site' => array(
+ 'wp-components',
+ 'wp-block-editor',
+ 'wp-edit-blocks',
+ ),
</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"> foreach ( $package_styles as $package => $dependencies ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1655,6 +1660,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-components',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-customize-widgets',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-edit-post',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'wp-edit-site',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'wp-edit-widgets',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-editor',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-format-library',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2265,7 +2271,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> wp_enqueue_style( 'wp-block-library' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( current_theme_supports( 'wp-block-styles' ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- wp_enqueue_style( 'wp-block-library-theme' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( wp_should_load_separate_core_block_assets() ) {
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? 'css' : 'min.css';
+ $files = glob( __DIR__ . "/blocks/**/theme.$suffix" );
+ foreach ( $files as $path ) {
+ $block_name = basename( dirname( $path ) );
+ if ( is_rtl() && file_exists( __DIR__ . "/blocks/$block_name/theme-rtl.$suffix" ) ) {
+ $path = __DIR__ . "/blocks/$block_name/theme-rtl.$suffix";
+ }
+ wp_add_inline_style( "wp-block-{$block_name}", file_get_contents( $path ) );
+ }
+ } else {
+ wp_enqueue_style( 'wp-block-library-theme' );
+ }
</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">@@ -2773,6 +2791,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.8.0
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_add_iframed_editor_assets_html() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ global $pagenow;
+
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( ! wp_should_load_block_editor_scripts_and_styles() ) {
</span><span class="cx" style="display: block; padding: 0 10px"> return;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2785,6 +2805,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-edit-blocks',
</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">+ if ( 'widgets.php' === $pagenow || 'customize.php' === $pagenow ) {
+ $style_handles[] = 'wp-widgets';
+ $style_handles[] = 'wp-edit-widgets';
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> $block_registry = WP_Block_Type_Registry::get_instance();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $block_registry->get_all_registered() as $block_type ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2806,7 +2831,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> ob_start();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- wp_styles()->done = array();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // We do not need reset styles for the iframed editor.
+ wp_styles()->done = array( 'wp-reset-editor-styles' );
</ins><span class="cx" style="display: block; padding: 0 10px"> wp_styles()->do_items( $style_handles );
</span><span class="cx" style="display: block; padding: 0 10px"> wp_styles()->done = $done;
</span><span class="cx" style="display: block; padding: 0 10px">
</span></span></pre></div>
<a id="trunksrcwpincludestemplatecanvasphp"></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/template-canvas.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/template-canvas.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/template-canvas.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10,8 +10,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * This needs to run before <head> so that blocks can add scripts and styles in wp_head().
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> $template_html = get_the_block_template_html();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-?>
-<!DOCTYPE html>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+?><!DOCTYPE html>
</ins><span class="cx" style="display: block; padding: 0 10px"> <html <?php language_attributes(); ?>>
</span><span class="cx" style="display: block; padding: 0 10px"> <head>
</span><span class="cx" style="display: block; padding: 0 10px"> <meta charset="<?php bloginfo( 'charset' ); ?>" />
</span></span></pre></div>
<a id="trunksrcwpincludesthemephp"></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/theme.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/theme.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/theme.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4075,3 +4075,14 @@
</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">+
+/**
+ * Returns whether the current theme is a block-based theme or not.
+ *
+ * @since 5.9.0
+ *
+ * @return boolean Whether the current theme is a block-based theme or not.
+ */
+function wp_is_block_template_theme() {
+ return is_readable( get_theme_file_path( '/block-templates/index.html' ) );
+}
</ins></span></pre></div>
<a id="trunksrcwpsettingsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-settings.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-settings.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-settings.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -317,6 +317,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/border.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/colors.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/custom-classname.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/block-supports/dimensions.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/duotone.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/elements.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/generated-classname.php';
</span></span></pre></div>
<a id="trunktestsphpunitincludesfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/includes/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/includes/functions.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/includes/functions.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -307,20 +307,27 @@
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_calendar' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_categories' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_file' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_action( 'init', 'register_block_core_loginout' );
</del><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_latest_comments' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_latest_posts' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_legacy_widget' );
+ remove_action( 'init', 'register_block_core_loginout' );
+ remove_action( 'init', 'register_block_core_navigation' );
+ remove_action( 'init', 'register_block_core_navigation_area' );
+ remove_action( 'init', 'register_block_core_navigation_link' );
+ remove_action( 'init', 'register_block_core_navigation_submenu' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_page_list' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_pattern' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_author' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_post_comments' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_content' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_date' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_excerpt' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_featured_image' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_post_navigation_link' );
+ remove_action( 'init', 'register_block_core_post_template' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_terms' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_post_title' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_query' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_action( 'init', 'register_block_core_post_template' );
- remove_action( 'init', 'gutenberg_register_legacy_query_loop_block' );
</del><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_query_pagination' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_query_pagination_next' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_query_pagination_numbers' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -329,14 +336,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_rss' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_search' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_shortcode' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_site_logo' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_site_tagline' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_action( 'init', 'register_block_core_site_logo' );
</del><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_site_title' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_social_link' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_social_link' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_block_core_tag_cloud' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ remove_action( 'init', 'register_block_core_template_part' );
+ remove_action( 'init', 'register_block_core_term_description' );
</ins><span class="cx" style="display: block; padding: 0 10px"> remove_action( 'init', 'register_core_block_types_from_metadata' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_action( 'init', 'register_block_core_legacy_widget' );
- remove_action( 'init', 'register_block_core_template_part' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> tests_add_filter( 'init', '_unhook_block_registration', 1000 );
</span></span></pre></div>
<a id="trunktestsphpunittestsblocksupportscolorsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/colors.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/colors.php (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/colors.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,47 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Colors_Test extends WP_UnitTestCase {
+
+ function test_color_slugs_with_numbers_are_kebab_cased_properly() {
+ register_block_type(
+ 'test/color-slug-with-numbers',
+ array(
+ 'api_version' => 2,
+ 'attributes' => array(
+ 'textColor' => array(
+ 'type' => 'string',
+ ),
+ 'backgroundColor' => array(
+ 'type' => 'string',
+ ),
+ 'gradient' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'supports' => array(
+ 'color' => array(
+ 'text' => true,
+ 'background' => true,
+ 'gradients' => true,
+ ),
+ ),
+ )
+ );
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block_type = $registry->get_registered( 'test/color-slug-with-numbers' );
+
+ $block_atts = array(
+ 'textColor' => 'fg1',
+ 'backgroundColor' => 'bg2',
+ 'gradient' => 'gr3',
+ );
+
+ $actual = wp_apply_colors_support( $block_type, $block_atts );
+ $expected = array( 'class' => 'has-text-color has-fg-1-color has-background has-bg-2-background-color has-background has-gr-3-gradient-background' );
+
+ $this->assertSame( $expected, $actual );
+ unregister_block_type( 'test/color-slug-with-numbers' );
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/colors.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportselementsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/elements.php (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/elements.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,104 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Elements_Test extends WP_UnitTestCase {
+ /**
+ * Given a string containing a class prefixed by "wp-elements-" followed by a unique id,
+ * this function returns a string where the id is one instead of being unique.
+ *
+ * @param string $string String containing unique id classes.
+ * @return string String where the unique id classes were replaced with "wp-elements-1".
+ */
+ private static function make_unique_id_one( $string ) {
+ return preg_replace( '/wp-elements-.{13}/', 'wp-elements-1', $string );
+ }
+
+ /**
+ * Test wp_render_elements_support() with a simple paragraph and link color preset.
+ */
+ public function test_simple_paragraph_link_color() {
+ $result = self::make_unique_id_one(
+ wp_render_elements_support(
+ '<p>Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+ array(
+ 'blockName' => 'core/paragraph',
+ 'attrs' => array(
+ 'style' => array(
+ 'elements' => array(
+ 'link' => array(
+ 'color' => array(
+ 'text' => 'var:preset|color|subtle-background',
+ ),
+ ),
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->assertSame(
+ $result,
+ '<p class="wp-elements-1">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+ );
+ }
+
+ /**
+ * Test wp_render_elements_support() with a paragraph containing a class.
+ */
+ public function test_class_paragraph_link_color() {
+ $result = self::make_unique_id_one(
+ wp_render_elements_support(
+ '<p class="has-dark-gray-background-color has-background">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+ array(
+ 'blockName' => 'core/paragraph',
+ 'attrs' => array(
+ 'style' => array(
+ 'elements' => array(
+ 'link' => array(
+ 'color' => array(
+ 'text' => 'red',
+ ),
+ ),
+ ),
+ ),
+ 'backgroundColor' => 'dark-gray',
+ ),
+ )
+ )
+ );
+ $this->assertSame(
+ $result,
+ '<p class="wp-elements-1 has-dark-gray-background-color has-background">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+ );
+ }
+
+ /**
+ * Test wp_render_elements_support() with a paragraph containing a anchor.
+ */
+ public function test_anchor_paragraph_link_color() {
+ $result = self::make_unique_id_one(
+ wp_render_elements_support(
+ '<p id="anchor">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+ array(
+ 'blockName' => 'core/paragraph',
+ 'attrs' => array(
+ 'style' => array(
+ 'elements' => array(
+ 'link' => array(
+ 'color' => array(
+ 'text' => '#fff000',
+ ),
+ ),
+ ),
+ ),
+ ),
+ )
+ )
+ );
+ $this->assertSame(
+ $result,
+ '<p id="anchor" class="wp-elements-1">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+ );
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/elements.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportsspacingphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/spacing.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/spacing.php (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/spacing.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,138 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Spacing_Test extends WP_UnitTestCase {
+ private $sample_block_content = '<div class="wp-block-test-block">Test</div>';
+ private $test_gap_block_value = array();
+ private $test_gap_block_args = array();
+
+ function set_up() {
+ parent::set_up();
+
+ $this->test_gap_block_value = array(
+ 'blockName' => 'test/test-block',
+ 'attrs' => array(
+ 'style' => array(
+ 'spacing' => array(
+ 'blockGap' => '3em',
+ ),
+ ),
+ ),
+ );
+
+ $this->test_gap_block_args = array(
+ 'api_version' => 2,
+ 'supports' => array(
+ 'spacing' => array(
+ 'blockGap' => true,
+ ),
+ ),
+ );
+ }
+
+ function tear_down() {
+ unregister_block_type( 'test/test-block' );
+
+ parent::tear_down();
+ }
+
+ function test_spacing_gap_block_support_renders_block_inline_style() {
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ $this->sample_block_content,
+ $this->test_gap_block_value
+ );
+
+ $this->assertSame(
+ '<div style="--wp--style--block-gap: 3em" class="wp-block-test-block">Test</div>',
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_renders_block_inline_style_with_inner_tag() {
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ '<div class="wp-test-block"><p style="color: red;">Test</p></div>',
+ $this->test_gap_block_value
+ );
+
+ $this->assertSame(
+ '<div style="--wp--style--block-gap: 3em" class="wp-test-block"><p style="color: red;">Test</p></div>',
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_renders_block_inline_style_with_no_other_attributes() {
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ '<div><p>Test</p></div>',
+ $this->test_gap_block_value
+ );
+
+ $this->assertSame(
+ '<div style="--wp--style--block-gap: 3em"><p>Test</p></div>',
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_renders_appended_block_inline_style() {
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ '<div class="wp-test-block" style="background: green;"><p style="color: red;">Test</p></div>',
+ $this->test_gap_block_value
+ );
+
+ $this->assertSame(
+ '<div class="wp-test-block" style="--wp--style--block-gap: 3em; background: green;"><p style="color: red;">Test</p></div>',
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_does_not_render_style_when_support_is_false() {
+ $this->test_gap_block_args['supports']['spacing']['blockGap'] = false;
+
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ $this->sample_block_content,
+ $this->test_gap_block_value
+ );
+
+ $this->assertEquals(
+ $this->sample_block_content,
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_does_not_render_style_when_gap_is_null() {
+ $this->test_gap_block_value['attrs']['style']['spacing']['blockGap'] = null;
+ $this->test_gap_block_args['supports']['spacing']['blockGap'] = true;
+
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ $this->sample_block_content,
+ $this->test_gap_block_value
+ );
+
+ $this->assertEquals(
+ $this->sample_block_content,
+ $render_output
+ );
+ }
+
+ function test_spacing_gap_block_support_does_not_render_style_when_gap_is_illegal_value() {
+ $this->test_gap_block_value['attrs']['style']['spacing']['blockGap'] = '" javascript="alert("hello");';
+ $this->test_gap_block_args['supports']['spacing']['blockGap'] = true;
+
+ register_block_type( 'test/test-block', $this->test_gap_block_args );
+ $render_output = wp_render_spacing_gap_support(
+ $this->sample_block_content,
+ $this->test_gap_block_value
+ );
+
+ $this->assertEquals(
+ $this->sample_block_content,
+ $render_output
+ );
+ }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/spacing.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportstypographyphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/typography.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/typography.php (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/typography.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,123 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Typography_Test extends WP_UnitTestCase {
+
+ function test_font_size_slug_with_numbers_is_kebab_cased_properly() {
+ register_block_type(
+ 'test/font-size-slug-with-numbers',
+ array(
+ 'api_version' => 2,
+ 'attributes' => array(
+ 'fontSize' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'supports' => array(
+ 'typography' => array(
+ 'fontSize' => true,
+ ),
+ ),
+ )
+ );
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block_type = $registry->get_registered( 'test/font-size-slug-with-numbers' );
+
+ $block_atts = array( 'fontSize' => 'h1' );
+
+ $actual = wp_apply_typography_support( $block_type, $block_atts );
+ $expected = array( 'class' => 'has-h-1-font-size' );
+
+ $this->assertSame( $expected, $actual );
+ unregister_block_type( 'test/font-size-slug-with-numbers' );
+ }
+
+ function test_font_family_with_legacy_inline_styles_using_a_value() {
+ $block_name = 'test/font-family-with-inline-styles-using-value';
+ register_block_type(
+ $block_name,
+ array(
+ 'api_version' => 2,
+ 'attributes' => array(
+ 'style' => array(
+ 'type' => 'object',
+ ),
+ ),
+ 'supports' => array(
+ 'typography' => array(
+ '__experimentalFontFamily' => true,
+ ),
+ ),
+ )
+ );
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block_type = $registry->get_registered( $block_name );
+ $block_atts = array( 'style' => array( 'typography' => array( 'fontFamily' => 'serif' ) ) );
+
+ $actual = wp_apply_typography_support( $block_type, $block_atts );
+ $expected = array( 'style' => 'font-family: serif;' );
+
+ $this->assertSame( $expected, $actual );
+ unregister_block_type( $block_name );
+ }
+
+ function test_font_family_with_legacy_inline_styles_using_a_css_var() {
+ $block_name = 'test/font-family-with-inline-styles-using-css-var';
+ register_block_type(
+ $block_name,
+ array(
+ 'api_version' => 2,
+ 'attributes' => array(
+ 'style' => array(
+ 'type' => 'object',
+ ),
+ ),
+ 'supports' => array(
+ 'typography' => array(
+ '__experimentalFontFamily' => true,
+ ),
+ ),
+ )
+ );
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block_type = $registry->get_registered( $block_name );
+ $block_atts = array( 'style' => array( 'typography' => array( 'fontFamily' => 'var:preset|font-family|h1' ) ) );
+
+ $actual = wp_apply_typography_support( $block_type, $block_atts );
+ $expected = array( 'style' => 'font-family: var(--wp--preset--font-family--h-1);' );
+
+ $this->assertSame( $expected, $actual );
+ unregister_block_type( $block_name );
+ }
+
+ function test_font_family_with_class() {
+ $block_name = 'test/font-family-with-class';
+ register_block_type(
+ $block_name,
+ array(
+ 'api_version' => 2,
+ 'attributes' => array(
+ 'style' => array(
+ 'type' => 'object',
+ ),
+ ),
+ 'supports' => array(
+ 'typography' => array(
+ '__experimentalFontFamily' => true,
+ ),
+ ),
+ )
+ );
+ $registry = WP_Block_Type_Registry::get_instance();
+ $block_type = $registry->get_registered( $block_name );
+ $block_atts = array( 'fontFamily' => 'h1' );
+
+ $actual = wp_apply_typography_support( $block_type, $block_atts );
+ $expected = array( 'class' => 'has-h-1-font-family' );
+
+ $this->assertSame( $expected, $actual );
+ unregister_block_type( $block_name );
+ }
+
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/typography.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocktemplateutilsphp"></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/block-template-utils.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-template-utils.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/block-template-utils.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -75,7 +75,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> wp_delete_post( self::$post->ID );
</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">- public function test_build_template_result_from_post() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_build_block_template_result_from_post() {
</ins><span class="cx" style="display: block; padding: 0 10px"> $template = _build_block_template_result_from_post(
</span><span class="cx" style="display: block; padding: 0 10px"> self::$post,
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp_template'
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestschemasetupphp"></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/rest-api/rest-schema-setup.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -154,8 +154,15 @@
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp/v2/widget-types',
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)',
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/encode',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/render',
</ins><span class="cx" style="display: block; padding: 0 10px"> '/wp/v2/widgets',
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp/v2/widgets/(?P<id>[\w\-]+)',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ '/wp/v2/navigation',
+ '/wp/v2/navigation/(?P<id>[\d]+)',
+ '/wp/v2/navigation/(?P<id>[\d]+)/autosaves',
+ '/wp/v2/navigation/(?P<parent>[\d]+)/autosaves/(?P<id>[\d]+)',
+ '/wp/v2/navigation/(?P<parent>[\d]+)/revisions',
+ '/wp/v2/navigation/(?P<parent>[\d]+)/revisions/(?P<id>[\d]+)',
</ins><span class="cx" style="display: block; padding: 0 10px"> '/wp-site-health/v1',
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp-site-health/v1/tests/background-updates',
</span><span class="cx" style="display: block; padding: 0 10px"> '/wp-site-health/v1/tests/loopback-requests',
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestuserscontrollerphp"></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/rest-api/rest-users-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-users-controller.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/rest-api/rest-users-controller.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -207,6 +207,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'search',
</span><span class="cx" style="display: block; padding: 0 10px"> 'slug',
</span><span class="cx" style="display: block; padding: 0 10px"> 'who',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'has_published_posts',
</ins><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> $keys
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span></span></pre></div>
<a id="trunktestsqunitfixtureswpapigeneratedjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/fixtures/wp-api-generated.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/fixtures/wp-api-generated.js 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/qunit/fixtures/wp-api-generated.js 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5115,6 +5115,814 @@
</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">+ "/wp/v2/navigation": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET",
+ "POST"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ },
+ "page": {
+ "description": "Current page of the collection.",
+ "type": "integer",
+ "default": 1,
+ "minimum": 1,
+ "required": false
+ },
+ "per_page": {
+ "description": "Maximum number of items to be returned in result set.",
+ "type": "integer",
+ "default": 10,
+ "minimum": 1,
+ "maximum": 100,
+ "required": false
+ },
+ "search": {
+ "description": "Limit results to those matching a string.",
+ "type": "string",
+ "required": false
+ },
+ "after": {
+ "description": "Limit response to posts published after a given ISO8601 compliant date.",
+ "type": "string",
+ "format": "date-time",
+ "required": false
+ },
+ "modified_after": {
+ "description": "Limit response to posts modified after a given ISO8601 compliant date.",
+ "type": "string",
+ "format": "date-time",
+ "required": false
+ },
+ "before": {
+ "description": "Limit response to posts published before a given ISO8601 compliant date.",
+ "type": "string",
+ "format": "date-time",
+ "required": false
+ },
+ "modified_before": {
+ "description": "Limit response to posts modified before a given ISO8601 compliant date.",
+ "type": "string",
+ "format": "date-time",
+ "required": false
+ },
+ "exclude": {
+ "description": "Ensure result set excludes specific IDs.",
+ "type": "array",
+ "items": {
+ "type": "integer"
+ },
+ "default": [],
+ "required": false
+ },
+ "include": {
+ "description": "Limit result set to specific IDs.",
+ "type": "array",
+ "items": {
+ "type": "integer"
+ },
+ "default": [],
+ "required": false
+ },
+ "offset": {
+ "description": "Offset the result set by a specific number of items.",
+ "type": "integer",
+ "required": false
+ },
+ "order": {
+ "description": "Order sort attribute ascending or descending.",
+ "type": "string",
+ "default": "desc",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "required": false
+ },
+ "orderby": {
+ "description": "Sort collection by post attribute.",
+ "type": "string",
+ "default": "date",
+ "enum": [
+ "author",
+ "date",
+ "id",
+ "include",
+ "modified",
+ "parent",
+ "relevance",
+ "slug",
+ "include_slugs",
+ "title"
+ ],
+ "required": false
+ },
+ "slug": {
+ "description": "Limit result set to posts with one or more specific slugs.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "required": false
+ },
+ "status": {
+ "default": "publish",
+ "description": "Limit result set to posts assigned one or more statuses.",
+ "type": "array",
+ "items": {
+ "enum": [
+ "publish",
+ "future",
+ "draft",
+ "pending",
+ "private",
+ "trash",
+ "auto-draft",
+ "inherit",
+ "request-pending",
+ "request-confirmed",
+ "request-failed",
+ "request-completed",
+ "any"
+ ],
+ "type": "string"
+ },
+ "required": false
+ }
+ }
+ },
+ {
+ "methods": [
+ "POST"
+ ],
+ "args": {
+ "date": {
+ "description": "The date the post was published, in the site's timezone.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "date_gmt": {
+ "description": "The date the post was published, as GMT.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "slug": {
+ "description": "An alphanumeric identifier for the post unique to its type.",
+ "type": "string",
+ "required": false
+ },
+ "status": {
+ "description": "A named status for the post.",
+ "type": "string",
+ "enum": [
+ "publish",
+ "future",
+ "draft",
+ "pending",
+ "private"
+ ],
+ "required": false
+ },
+ "password": {
+ "description": "A password to protect access to the content and excerpt.",
+ "type": "string",
+ "required": false
+ },
+ "title": {
+ "description": "The title for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Title for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML title for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "content": {
+ "description": "The content for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Content for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML content for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit"
+ ],
+ "readonly": true
+ },
+ "block_version": {
+ "description": "Version of the content block format used by the post.",
+ "type": "integer",
+ "context": [
+ "edit"
+ ],
+ "readonly": true
+ },
+ "protected": {
+ "description": "Whether the content is protected with a password.",
+ "type": "boolean",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "template": {
+ "description": "The theme file to use to display the post.",
+ "type": "string",
+ "required": false
+ }
+ }
+ }
+ ],
+ "_links": {
+ "self": [
+ {
+ "href": "http://example.org/index.php?rest_route=/wp/v2/navigation"
+ }
+ ]
+ }
+ },
+ "/wp/v2/navigation/(?P<id>[\\d]+)": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET",
+ "POST",
+ "PUT",
+ "PATCH",
+ "DELETE"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "id": {
+ "description": "Unique identifier for the post.",
+ "type": "integer",
+ "required": false
+ },
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ },
+ "password": {
+ "description": "The password for the post if it is password protected.",
+ "type": "string",
+ "required": false
+ }
+ }
+ },
+ {
+ "methods": [
+ "POST",
+ "PUT",
+ "PATCH"
+ ],
+ "args": {
+ "id": {
+ "description": "Unique identifier for the post.",
+ "type": "integer",
+ "required": false
+ },
+ "date": {
+ "description": "The date the post was published, in the site's timezone.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "date_gmt": {
+ "description": "The date the post was published, as GMT.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "slug": {
+ "description": "An alphanumeric identifier for the post unique to its type.",
+ "type": "string",
+ "required": false
+ },
+ "status": {
+ "description": "A named status for the post.",
+ "type": "string",
+ "enum": [
+ "publish",
+ "future",
+ "draft",
+ "pending",
+ "private"
+ ],
+ "required": false
+ },
+ "password": {
+ "description": "A password to protect access to the content and excerpt.",
+ "type": "string",
+ "required": false
+ },
+ "title": {
+ "description": "The title for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Title for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML title for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "content": {
+ "description": "The content for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Content for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML content for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit"
+ ],
+ "readonly": true
+ },
+ "block_version": {
+ "description": "Version of the content block format used by the post.",
+ "type": "integer",
+ "context": [
+ "edit"
+ ],
+ "readonly": true
+ },
+ "protected": {
+ "description": "Whether the content is protected with a password.",
+ "type": "boolean",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "template": {
+ "description": "The theme file to use to display the post.",
+ "type": "string",
+ "required": false
+ }
+ }
+ },
+ {
+ "methods": [
+ "DELETE"
+ ],
+ "args": {
+ "id": {
+ "description": "Unique identifier for the post.",
+ "type": "integer",
+ "required": false
+ },
+ "force": {
+ "type": "boolean",
+ "default": false,
+ "description": "Whether to bypass Trash and force deletion.",
+ "required": false
+ }
+ }
+ }
+ ]
+ },
+ "/wp/v2/navigation/(?P<parent>[\\d]+)/revisions": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the revision.",
+ "type": "integer",
+ "required": false
+ },
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ },
+ "page": {
+ "description": "Current page of the collection.",
+ "type": "integer",
+ "default": 1,
+ "minimum": 1,
+ "required": false
+ },
+ "per_page": {
+ "description": "Maximum number of items to be returned in result set.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "required": false
+ },
+ "search": {
+ "description": "Limit results to those matching a string.",
+ "type": "string",
+ "required": false
+ },
+ "exclude": {
+ "description": "Ensure result set excludes specific IDs.",
+ "type": "array",
+ "items": {
+ "type": "integer"
+ },
+ "default": [],
+ "required": false
+ },
+ "include": {
+ "description": "Limit result set to specific IDs.",
+ "type": "array",
+ "items": {
+ "type": "integer"
+ },
+ "default": [],
+ "required": false
+ },
+ "offset": {
+ "description": "Offset the result set by a specific number of items.",
+ "type": "integer",
+ "required": false
+ },
+ "order": {
+ "description": "Order sort attribute ascending or descending.",
+ "type": "string",
+ "default": "desc",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "required": false
+ },
+ "orderby": {
+ "description": "Sort collection by object attribute.",
+ "type": "string",
+ "default": "date",
+ "enum": [
+ "date",
+ "id",
+ "include",
+ "relevance",
+ "slug",
+ "include_slugs",
+ "title"
+ ],
+ "required": false
+ }
+ }
+ }
+ ]
+ },
+ "/wp/v2/navigation/(?P<parent>[\\d]+)/revisions/(?P<id>[\\d]+)": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET",
+ "DELETE"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the revision.",
+ "type": "integer",
+ "required": false
+ },
+ "id": {
+ "description": "Unique identifier for the revision.",
+ "type": "integer",
+ "required": false
+ },
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ }
+ }
+ },
+ {
+ "methods": [
+ "DELETE"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the revision.",
+ "type": "integer",
+ "required": false
+ },
+ "id": {
+ "description": "Unique identifier for the revision.",
+ "type": "integer",
+ "required": false
+ },
+ "force": {
+ "type": "boolean",
+ "default": false,
+ "description": "Required to be true, as revisions do not support trashing.",
+ "required": false
+ }
+ }
+ }
+ ]
+ },
+ "/wp/v2/navigation/(?P<id>[\\d]+)/autosaves": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET",
+ "POST"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the autosave.",
+ "type": "integer",
+ "required": false
+ },
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ }
+ }
+ },
+ {
+ "methods": [
+ "POST"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the autosave.",
+ "type": "integer",
+ "required": false
+ },
+ "date": {
+ "description": "The date the post was published, in the site's timezone.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "date_gmt": {
+ "description": "The date the post was published, as GMT.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "required": false
+ },
+ "slug": {
+ "description": "An alphanumeric identifier for the post unique to its type.",
+ "type": "string",
+ "required": false
+ },
+ "status": {
+ "description": "A named status for the post.",
+ "type": "string",
+ "enum": [
+ "publish",
+ "future",
+ "draft",
+ "pending",
+ "private"
+ ],
+ "required": false
+ },
+ "password": {
+ "description": "A password to protect access to the content and excerpt.",
+ "type": "string",
+ "required": false
+ },
+ "title": {
+ "description": "The title for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Title for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML title for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "content": {
+ "description": "The content for the post.",
+ "type": "object",
+ "properties": {
+ "raw": {
+ "description": "Content for the post, as it exists in the database.",
+ "type": "string",
+ "context": [
+ "edit"
+ ]
+ },
+ "rendered": {
+ "description": "HTML content for the post, transformed for display.",
+ "type": "string",
+ "context": [
+ "view",
+ "edit"
+ ],
+ "readonly": true
+ },
+ "block_version": {
+ "description": "Version of the content block format used by the post.",
+ "type": "integer",
+ "context": [
+ "edit"
+ ],
+ "readonly": true
+ },
+ "protected": {
+ "description": "Whether the content is protected with a password.",
+ "type": "boolean",
+ "context": [
+ "view",
+ "edit",
+ "embed"
+ ],
+ "readonly": true
+ }
+ },
+ "required": false
+ },
+ "template": {
+ "description": "The theme file to use to display the post.",
+ "type": "string",
+ "required": false
+ }
+ }
+ }
+ ]
+ },
+ "/wp/v2/navigation/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+)": {
+ "namespace": "wp/v2",
+ "methods": [
+ "GET"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "GET"
+ ],
+ "args": {
+ "parent": {
+ "description": "The ID for the parent of the autosave.",
+ "type": "integer",
+ "required": false
+ },
+ "id": {
+ "description": "The ID for the autosave.",
+ "type": "integer",
+ "required": false
+ },
+ "context": {
+ "description": "Scope under which the request is made; determines fields present in response.",
+ "type": "string",
+ "enum": [
+ "view",
+ "embed",
+ "edit"
+ ],
+ "default": "view",
+ "required": false
+ }
+ }
+ }
+ ]
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "/wp/v2/types": {
</span><span class="cx" style="display: block; padding: 0 10px"> "namespace": "wp/v2",
</span><span class="cx" style="display: block; padding: 0 10px"> "methods": [
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5930,6 +6738,26 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "authors"
</span><span class="cx" style="display: block; padding: 0 10px"> ],
</span><span class="cx" style="display: block; padding: 0 10px"> "required": false
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ },
+ "has_published_posts": {
+ "description": "Limit result set to users who have published posts.",
+ "type": [
+ "boolean",
+ "array"
+ ],
+ "items": {
+ "type": "string",
+ "enum": {
+ "post": "post",
+ "page": "page",
+ "attachment": "attachment",
+ "wp_block": "wp_block",
+ "wp_template": "wp_template",
+ "wp_template_part": "wp_template_part",
+ "wp_navigation": "wp_navigation"
+ }
+ },
+ "required": false
</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">@@ -7728,6 +8556,31 @@
</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">+ "/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/render": {
+ "namespace": "wp/v2",
+ "methods": [
+ "POST"
+ ],
+ "endpoints": [
+ {
+ "methods": [
+ "POST"
+ ],
+ "args": {
+ "id": {
+ "description": "The widget type id.",
+ "type": "string",
+ "required": true
+ },
+ "instance": {
+ "description": "Current instance settings of the widget.",
+ "type": "object",
+ "required": false
+ }
+ }
+ }
+ ]
+ },
</ins><span class="cx" style="display: block; padding: 0 10px"> "/wp/v2/widgets": {
</span><span class="cx" style="display: block; padding: 0 10px"> "namespace": "wp/v2",
</span><span class="cx" style="display: block; padding: 0 10px"> "methods": [
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9210,6 +10063,34 @@
</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">+ },
+ "wp_navigation": {
+ "description": "Navigation menus.",
+ "hierarchical": false,
+ "name": "Navigation Menus",
+ "slug": "wp_navigation",
+ "taxonomies": [],
+ "rest_base": "navigation",
+ "rest_namespace": "wp/v2",
+ "_links": {
+ "collection": [
+ {
+ "href": "http://example.org/index.php?rest_route=/wp/v2/types"
+ }
+ ],
+ "wp:items": [
+ {
+ "href": "http://example.org/index.php?rest_route=/wp/v2/navigation"
+ }
+ ],
+ "curies": [
+ {
+ "name": "wp",
+ "href": "https://api.w.org/{rel}",
+ "templated": true
+ }
+ ]
+ }
</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="trunktoolswebpackblocksjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tools/webpack/blocks.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tools/webpack/blocks.js 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tools/webpack/blocks.js 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31,14 +31,22 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'latest-comments',
</span><span class="cx" style="display: block; padding: 0 10px"> 'latest-posts',
</span><span class="cx" style="display: block; padding: 0 10px"> 'loginout',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'navigation',
+ 'navigation-area',
+ 'navigation-link',
+ 'navigation-submenu',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'page-list',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'pattern',
+ 'post-author',
+ 'post-comments',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'post-content',
</span><span class="cx" style="display: block; padding: 0 10px"> 'post-date',
</span><span class="cx" style="display: block; padding: 0 10px"> 'post-excerpt',
</span><span class="cx" style="display: block; padding: 0 10px"> 'post-featured-image',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'post-navigation-link',
+ 'post-template',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'post-terms',
</span><span class="cx" style="display: block; padding: 0 10px"> 'post-title',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'post-template',
</del><span class="cx" style="display: block; padding: 0 10px"> 'query',
</span><span class="cx" style="display: block; padding: 0 10px"> 'query-pagination',
</span><span class="cx" style="display: block; padding: 0 10px"> 'query-pagination-next',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -54,6 +62,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'social-link',
</span><span class="cx" style="display: block; padding: 0 10px"> 'tag-cloud',
</span><span class="cx" style="display: block; padding: 0 10px"> 'template-part',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'term-description',
</ins><span class="cx" style="display: block; padding: 0 10px"> ];
</span><span class="cx" style="display: block; padding: 0 10px"> const blockFolders = [
</span><span class="cx" style="display: block; padding: 0 10px"> 'audio',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,6 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ];
</span><span class="cx" style="display: block; padding: 0 10px"> const blockPHPFiles = {
</span><span class="cx" style="display: block; padding: 0 10px"> 'widgets/src/blocks/legacy-widget/index.php': 'wp-includes/blocks/legacy-widget.php',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'widgets/src/blocks/widget-group/index.php': 'wp-includes/blocks/widget-group.php',
</ins><span class="cx" style="display: block; padding: 0 10px"> ...dynamicBlockFolders.reduce( ( files, blockName ) => {
</span><span class="cx" style="display: block; padding: 0 10px"> files[ `block-library/src/${ blockName }/index.php` ] = `wp-includes/blocks/${ blockName }.php`;
</span><span class="cx" style="display: block; padding: 0 10px"> return files;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,6 +107,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> };
</span><span class="cx" style="display: block; padding: 0 10px"> const blockMetadataFiles = {
</span><span class="cx" style="display: block; padding: 0 10px"> 'widgets/src/blocks/legacy-widget/block.json': 'wp-includes/blocks/legacy-widget/block.json',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'widgets/src/blocks/widget-group/block.json': 'wp-includes/blocks/widget-group/block.json',
</ins><span class="cx" style="display: block; padding: 0 10px"> ...blockFolders.reduce( ( files, blockName ) => {
</span><span class="cx" style="display: block; padding: 0 10px"> files[ `block-library/src/${ blockName }/block.json` ] = `wp-includes/blocks/${ blockName }/block.json`;
</span><span class="cx" style="display: block; padding: 0 10px"> return files;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -143,6 +154,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> mode,
</span><span class="cx" style="display: block; padding: 0 10px"> entry: {
</span><span class="cx" style="display: block; padding: 0 10px"> 'file/view': join( baseDir, `node_modules/@wordpress/block-library/build-module/file/view` ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'navigation/view': join( baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view` ),
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> output: {
</span><span class="cx" style="display: block; padding: 0 10px"> devtoolNamespace: 'wp',
</span></span></pre>
</div>
</div>
</body>
</html>