Commit d09a95d3 authored by Sergey Shadrin's avatar Sergey Shadrin

[#124455] Updated core to 10.3.1

parent a8127491
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "6a361af2e861ea2934a2334778455467",
"content-hash": "9c4d63fd9886cc5e33ef088767477565",
"packages": [
{
"name": "algolia/places",
......@@ -2898,16 +2898,16 @@
},
{
"name": "drupal/core",
"version": "10.3.0",
"version": "10.3.1",
"source": {
"type": "git",
"url": "https://github.com/drupal/core.git",
"reference": "6f1af3070110d7d0f2a6671bea26add34667f765"
"reference": "d137403a30d4154404e473785f48dfc889d77e23"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/drupal/core/zipball/6f1af3070110d7d0f2a6671bea26add34667f765",
"reference": "6f1af3070110d7d0f2a6671bea26add34667f765",
"url": "https://api.github.com/repos/drupal/core/zipball/d137403a30d4154404e473785f48dfc889d77e23",
"reference": "d137403a30d4154404e473785f48dfc889d77e23",
"shasum": ""
},
"require": {
......@@ -3056,13 +3056,13 @@
],
"description": "Drupal is an open source content management platform powering millions of websites and applications.",
"support": {
"source": "https://github.com/drupal/core/tree/10.3.0"
"source": "https://github.com/drupal/core/tree/10.3.1"
},
"time": "2024-06-20T18:58:42+00:00"
"time": "2024-07-04T11:33:45+00:00"
},
{
"name": "drupal/core-composer-scaffold",
"version": "10.3.0",
"version": "10.3.1",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-composer-scaffold.git",
......@@ -3106,13 +3106,13 @@
"drupal"
],
"support": {
"source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.0"
"source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.1"
},
"time": "2024-05-11T08:21:39+00:00"
},
{
"name": "drupal/core-project-message",
"version": "10.3.0",
"version": "10.3.1",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-project-message.git",
......@@ -3153,16 +3153,16 @@
},
{
"name": "drupal/core-recommended",
"version": "10.3.0",
"version": "10.3.1",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-recommended.git",
"reference": "991f849f74e585597b1f7b11daf9acf79b546939"
"reference": "a5183f2be315b7e5deec89fdeafe9fc9a2e54f57"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/drupal/core-recommended/zipball/991f849f74e585597b1f7b11daf9acf79b546939",
"reference": "991f849f74e585597b1f7b11daf9acf79b546939",
"url": "https://api.github.com/repos/drupal/core-recommended/zipball/a5183f2be315b7e5deec89fdeafe9fc9a2e54f57",
"reference": "a5183f2be315b7e5deec89fdeafe9fc9a2e54f57",
"shasum": ""
},
"require": {
......@@ -3171,7 +3171,7 @@
"doctrine/annotations": "~1.14.3",
"doctrine/deprecations": "~1.1.3",
"doctrine/lexer": "~2.1.1",
"drupal/core": "10.3.0",
"drupal/core": "10.3.1",
"egulias/email-validator": "~4.0.2",
"guzzlehttp/guzzle": "~7.8.1",
"guzzlehttp/promises": "~2.0.2",
......@@ -3232,9 +3232,9 @@
],
"description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.",
"support": {
"source": "https://github.com/drupal/core-recommended/tree/10.3.0"
"source": "https://github.com/drupal/core-recommended/tree/10.3.1"
},
"time": "2024-06-20T18:58:42+00:00"
"time": "2024-07-04T11:33:45+00:00"
},
{
"name": "drupal/crop",
......
......@@ -310,6 +310,13 @@ Migrate
- Michael Lutz 'mikelutz' https://www.drupal.org/u/mikelutz
- Victoria Spagnolo 'quietone' https://www.drupal.org/u/quietone
Navigation
- Cristina Chumillas 'ckrina' https://www.drupal.org/u/ckrina
- Ivan Berdinsky 'finnsky' https://www.drupal.org/u/finnsky
- Matthew Oliveira 'm4olivei' https://www.drupal.org/u/m4olivei
- Théodore Biadala 'nod_' https://www.drupal.org/u/nod_
- Pablo López 'plopesc' https://www.drupal.org/u/plopesc
Node
- ?
......
......@@ -426,6 +426,8 @@ function install_begin_request($class_loader, &$install_state) {
$kernel::bootEnvironment();
$kernel->setSitePath($site_path);
$kernel->boot();
// Get the new version of the container from the kernel. This is now a
// complete container with all services.
$container = $kernel->getContainer();
// If Drupal is being installed behind a proxy, configure the request.
ReverseProxyMiddleware::setSettingsOnRequest($request, Settings::getInstance());
......
......@@ -75,7 +75,7 @@ class Drupal {
/**
* The current system version.
*/
const VERSION = '10.3.0';
const VERSION = '10.3.1';
/**
* Core API compatibility.
......
......@@ -403,7 +403,7 @@ class LibraryDiscoveryParser {
}
}
// Core also provides additional libraries that don't come from the YAML,
// file nor the hook_library_info_build. They come from single directory
// file nor the hook_library_info_build. They come from single-directory
// component definitions.
$additional_libraries = $extension === 'core'
? $this->librariesForComponents()
......@@ -478,10 +478,10 @@ class LibraryDiscoveryParser {
}
/**
* Builds the dynamic library definitions for single directory components.
* Builds the dynamic library definitions for single-directory components.
*
* @return array
* The core library definitions for Single Directory Components.
* The core library definitions for Single-Directory Components.
*/
protected function librariesForComponents(): array {
// Iterate over all the components to get the CSS and JS files.
......
......@@ -53,6 +53,22 @@ use Drupal\Core\Validation\Plugin\Validation\Constraint\FullyValidatableConstrai
*/
class ConfigActionManager extends DefaultPluginManager {
/**
* Information about all deprecated plugin IDs.
*
* @var string[]
*/
private static array $deprecatedPluginIds = [
'entity_create:ensure_exists' => [
'replacement' => 'entity_create:createIfNotExists',
'message' => 'The plugin ID "entity_create:ensure_exists" is deprecated in drupal:10.3.1 and will be removed in drupal:12.0.0. Use "entity_create:createIfNotExists" instead. See https://www.drupal.org/node/3458273.',
],
'simple_config_update' => [
'replacement' => 'simpleConfigUpdate',
'message' => 'The plugin ID "simple_config_update" is deprecated in drupal:10.3.1 and will be removed in drupal:12.0.0. Use "simpleConfigUpdate" instead. See https://www.drupal.org/node/3458273.',
],
];
/**
* Constructs a new \Drupal\Core\Config\Action\ConfigActionManager object.
*
......@@ -218,4 +234,28 @@ class ConfigActionManager extends DefaultPluginManager {
return $map;
}
/**
* {@inheritdoc}
*/
public function alterDefinitions(&$definitions): void {
// Adds backwards compatibility for plugins that have been renamed.
foreach (self::$deprecatedPluginIds as $legacy => $new_plugin_id) {
$definitions[$legacy] = $definitions[$new_plugin_id['replacement']];
}
parent::alterDefinitions($definitions);
}
/**
* {@inheritdoc}
*/
public function createInstance($plugin_id, array $configuration = []) {
$instance = parent::createInstance($plugin_id, $configuration);
// Trigger deprecation notices for renamed plugins.
if (array_key_exists($plugin_id, self::$deprecatedPluginIds)) {
// phpcs:ignore Drupal.Semantics.FunctionTriggerError
@trigger_error(self::$deprecatedPluginIds[$plugin_id]['message'], E_USER_DEPRECATED);
}
return $instance;
}
}
......@@ -22,8 +22,8 @@ final class EntityCreateDeriver extends DeriverBase {
// These derivatives apply to all entity types.
$base_plugin_definition['entity_types'] = ['*'];
$this->derivatives['ensure_exists'] = $base_plugin_definition + ['constructor_args' => ['exists' => Exists::ReturnEarlyIfExists]];
$this->derivatives['ensure_exists']['admin_label'] = $this->t('Ensure entity exists');
$this->derivatives['createIfNotExists'] = $base_plugin_definition + ['constructor_args' => ['exists' => Exists::ReturnEarlyIfExists]];
$this->derivatives['createIfNotExists']['admin_label'] = $this->t('Create entity if it does not exist');
$this->derivatives['create'] = $base_plugin_definition + ['constructor_args' => ['exists' => Exists::ErrorIfExists]];
$this->derivatives['create']['admin_label'] = $this->t('Entity create');
......
......@@ -17,7 +17,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
* This API is experimental.
*/
#[ConfigAction(
id: 'simple_config_update',
id: 'simpleConfigUpdate',
admin_label: new TranslatableMarkup('Simple configuration update'),
)]
final class SimpleConfigUpdate implements ConfigActionPluginInterface, ContainerFactoryPluginInterface {
......
......@@ -5,13 +5,12 @@ namespace Drupal\Core\Extension;
use Drupal\Component\Graph\Graph;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\DestructableInterface;
use Drupal\Core\Extension\Exception\UnknownExtensionException;
/**
* Class that manages modules in a Drupal installation.
*/
class ModuleHandler implements ModuleHandlerInterface, DestructableInterface {
class ModuleHandler implements ModuleHandlerInterface {
/**
* List of loaded files.
......
......@@ -2,6 +2,8 @@
namespace Drupal\Core\Extension;
use Drupal\Core\DestructableInterface;
/**
* Interface for classes that manage a set of enabled modules.
*
......@@ -9,7 +11,7 @@ namespace Drupal\Core\Extension;
* responsible for loading module files and maintaining information about module
* dependencies and hook implementations.
*/
interface ModuleHandlerInterface {
interface ModuleHandlerInterface extends DestructableInterface {
/**
* Includes a module's .module file.
......
......@@ -345,6 +345,12 @@ class FormValidator implements FormValidatorInterface {
if (is_array($elements['#value'])) {
$value = in_array($elements['#type'], ['checkboxes', 'tableselect']) ? array_keys($elements['#value']) : $elements['#value'];
foreach ($value as $v) {
if (!is_scalar($v)) {
$message_arguments['%type'] = gettype($v);
$form_state->setError($elements, $this->t('The submitted value type %type in the %name element is not allowed.', $message_arguments));
$this->logger->error('The submitted value type %type in the %name element is not allowed.', $message_arguments);
continue;
}
if (!isset($options[$v])) {
$message_arguments['%choice'] = $v;
$form_state->setError($elements, $this->t('The submitted value %choice in the %name element is not allowed.', $message_arguments));
......
......@@ -16,7 +16,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
*
* @see https://guzzle.readthedocs.org/en/latest/handlers-and-middleware.html
*
* @see \Drupal\Core\Http\Client
* @see \GuzzleHttp\Client
* @see \Drupal\Core\Test\HttpClientMiddleware\TestHttpClientMiddleware
*/
class HandlerStackConfigurator {
......
......@@ -8,7 +8,7 @@ use Drupal\Core\Security\DoTrustedCallbackTrait;
use Drupal\Core\Render\Component\Exception\InvalidComponentDataException;
/**
* Provides a Single Directory Component render element.
* Provides a Single-Directory Component render element.
*
* Properties:
* - #component: The machine name of the component.
......@@ -100,7 +100,7 @@ class ComponentElement extends RenderElementBase {
array $slots_alter_callbacks,
array &$context,
): string {
$template = '{# This template was dynamically generated by single directory components #}' . PHP_EOL;
$template = '{# This template was dynamically generated by single-directory components #}' . PHP_EOL;
$template .= sprintf('{%% embed \'%s\' %%}', $id);
$template .= PHP_EOL;
foreach ($slots as $slot_name => $slot_value) {
......
......@@ -149,7 +149,7 @@
}
/**
* Handles an autocompletefocus event.
* Handles an autocomplete focus event.
*
* @return {boolean}
* Always returns false.
......@@ -159,7 +159,7 @@
}
/**
* Handles an autocompleteselect event.
* Handles an autocomplete select event.
*
* @param {jQuery.Event} event
* The event triggered.
......
......@@ -20,9 +20,6 @@ arrowstop
arrowthick
arrowthickstop
assertable
autocompletefocus
autocompleteselect
autocompleting
autoconfiguration
autoconfigure
autoconfigured
......@@ -77,7 +74,6 @@ blockpromoted
blockquotes
blockrecipe
blockrelated
blocktest
bodyless
boing
bovigo
......@@ -254,11 +250,9 @@ fdiv
fieldable
fieldapi
fieldblock
fieldbody
fieldgroup
fieldgroups
fieldlayout
fieldlinks
fieldnames
fieldsets
filemime
......@@ -703,17 +697,10 @@ tappable
taskless
tcomment
templating
testajax
testblock
testbody
testbot
testbots
testcase
testcontent
testcontextawareblock
testdialog
testgroups
testkey
testlogger
testsuite
testsuites
......@@ -754,7 +741,6 @@ twistie
twocol
tzid
uids
ulwa
unban
uncacheable
uncategorized
......
......@@ -37,13 +37,27 @@
* The default destination for JavaScript messages.
*/
static defaultWrapper() {
let wrapper = document.querySelector('[data-drupal-messages]');
// Search for the element with '[data-drupal-messages]' selector.
// If not found then only try to search for fallback element.
let wrapper =
document.querySelector('[data-drupal-messages]') ||
document.querySelector('[data-drupal-messages-fallback]');
if (!wrapper) {
wrapper = document.querySelector('[data-drupal-messages-fallback]');
// If no status messages element is found, a fallback element is created to prevent
// execution-breaking JS errors when attempting to report a problem.
// This scenario can occur on any page that does not include a status_messages
// render element.
wrapper = document.createElement('div');
document.body.appendChild(wrapper);
}
if (wrapper.hasAttribute('data-drupal-messages-fallback')) {
// Remove the fallback attribute if it exists.
wrapper.removeAttribute('data-drupal-messages-fallback');
wrapper.setAttribute('data-drupal-messages', '');
wrapper.classList.remove('hidden');
}
wrapper.setAttribute('data-drupal-messages', '');
return wrapper.innerHTML === ''
? Drupal.Message.messageInternalWrapper(wrapper)
: wrapper.firstElementChild;
......
......@@ -93,15 +93,16 @@
*/
Drupal.behaviors.states = {
attach(context, settings) {
const $states = $(context).find('[data-drupal-states]');
const il = $states.length;
// Uses once to avoid duplicates if attach is called multiple times.
const elements = once('states', '[data-drupal-states]', context);
const il = elements.length;
for (let i = 0; i < il; i++) {
const config = JSON.parse(
$states[i].getAttribute('data-drupal-states'),
elements[i].getAttribute('data-drupal-states'),
);
Object.keys(config || {}).forEach((state) => {
new states.Dependent({
element: $($states[i]),
element: $(elements[i]),
state: states.State.sanitize(state),
constraints: config[state],
});
......
......@@ -196,8 +196,11 @@
})
.end()
.show()
.siblings(':hidden.vertical-tabs__active-tab')[0].value =
this.details.attr('id');
.siblings(':hidden.vertical-tabs__active-tab')
.get()
.forEach((hidden) => {
hidden.value = this.details.attr('id');
});
this.details.attr('open', true);
this.item.addClass('is-selected');
// Mark the active tab for screen readers.
......
......@@ -330,6 +330,7 @@ class BigPipePlaceholderTestCases {
// cspell:disable-next-line
$exception->bigPipePlaceholderId = 'callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&amp;args%5B0%5D=llamas&amp;args%5B1%5D=suck&amp;token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU';
$exception->bigPipePlaceholderRenderArray = [
// cspell:disable-next-line
'#prefix' => '<span data-big-pipe-placeholder-id="callback=%5CDrupal%5Cbig_pipe_test%5CBigPipeTestController%3A%3Aexception&amp;args%5B0%5D=llamas&amp;args%5B1%5D=suck&amp;token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU">',
'interface_preview' => [
'#theme' => 'big_pipe_interface_preview',
......
......@@ -78,6 +78,7 @@ class FiberPlaceholderTest extends UnitTestCase {
'ajaxPageState' => [],
],
'big_pipe_placeholders' => [
// cspell:disable-next-line
'callback=%5CDrupal%5CTests%5Cbig_pipe%5CUnit%5CRender%5CTurtleLazyBuilder%3A%3Aturtle&amp;&amp;token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU' => [
'#lazy_builder' => [
'\Drupal\Tests\big_pipe\Unit\Render\TurtleLazyBuilder::turtle',
......@@ -89,6 +90,7 @@ class FiberPlaceholderTest extends UnitTestCase {
$response->setAttachments($attachments);
// Construct minimal HTML response.
// cspell:disable-next-line
$content = '<html><body><span data-big-pipe-placeholder-id="callback=%5CDrupal%5CTests%5Cbig_pipe%5CUnit%5CRender%5CTurtleLazyBuilder%3A%3Aturtle&amp;&amp;token=uhKFNfT4eF449_W-kDQX8E5z4yHyt0-nSHUlwaGAQeU"></body></html>';
$response->setContent($content);
......
......@@ -10,6 +10,7 @@ use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
use Drupal\Tests\BrowserTestBase;
// cspell:ignore displaymessage scriptalertxsssubjectscript
// cspell:ignore testcontextawareblock
/**
* Tests that the block configuration UI exists and stores data correctly.
......
......@@ -8,6 +8,8 @@ use Drupal\block_content\BlockContentInterface;
use Drupal\block_content\Entity\BlockContent;
use Drupal\Core\Database\Database;
// cspell:ignore testblock
/**
* Create a block and test saving it.
*
......
......@@ -10,7 +10,7 @@ use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\node\Entity\NodeType;
// cspell:ignore tuvan
// cspell:ignore testcontent tuvan
/**
* Translate settings and entities to various languages.
......
......@@ -268,7 +268,11 @@ abstract class EntityDisplayFormBase extends EntityForm {
// spinners will be added manually by the client-side script.
'progress' => 'none',
],
'#attributes' => ['class' => ['visually-hidden']],
'#attributes' => [
'class' => ['visually-hidden'],
// Ensure the button is not focusable via keyboard navigation.
'tabindex' => '-1',
],
];
$form['actions'] = ['#type' => 'actions'];
......
......@@ -47,7 +47,7 @@ class Sort {
/**
* The fields on which to sort.
*
* @var string
* @var array
*/
protected $fields;
......
......@@ -102,7 +102,7 @@ class LanguageBrowserDetectionAcceptLanguageTest extends BrowserTestBase {
$this->assertSession()->responseHeaderDoesNotExist('X-Drupal-Cache');
// Check with browser without language settings - should return fallback language.
$this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => NULL]);
$this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => '']);
$this->assertSession()->responseHeaderEquals('Content-Language', 'en');
$this->assertSession()->responseHeaderDoesNotExist('X-Drupal-Cache');
......
......@@ -11,7 +11,7 @@ use Drupal\Core\StringTranslation\TranslatableMarkup;
* Provides a 'TestAjax' block.
*/
#[Block(
id: "layout_builder_test_testajax",
id: "layout_builder_test_ajax",
admin_label: new TranslatableMarkup("TestAjax"),
category: new TranslatableMarkup("Test")
)]
......
......@@ -7,6 +7,8 @@ namespace Drupal\Tests\layout_builder\Functional;
use Drupal\node\Entity\Node;
use Drupal\views\Entity\View;
// cspell:ignore blocktest
/**
* Tests the Layout Builder UI with blocks.
*
......
......@@ -104,8 +104,8 @@ class AjaxBlockTest extends WebDriverTestBase {
// Then add the block.
$assert_session->waitForElementVisible('named', ['button', 'Add block'])->press();
$assert_session->assertWaitOnAjaxRequest();
$assert_session->waitForElementVisible('css', '.block-layout-builder-test-testajax');
$block_elements = $this->cssSelect('.block-layout-builder-test-testajax');
$assert_session->waitForElementVisible('css', '.block-layout-builder-test-ajax');
$block_elements = $this->cssSelect('.block-layout-builder-test-ajax');
// Should be exactly one of these in there.
$this->assertCount(1, $block_elements);
$assert_session->pageTextContains('Every word is like an unnecessary stain on silence and nothingness.');
......
......@@ -9,6 +9,8 @@ use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
use Drupal\Tests\system\Traits\OffCanvasTestTrait;
// cspell:ignore testbody
/**
* Tests toggling of content preview.
*
......
......@@ -8,6 +8,8 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
// cspell:ignore blocktest
/**
* Test contextual links compatibility with the Layout Builder.
*
......
......@@ -13,6 +13,8 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
use Drupal\Tests\system\Traits\OffCanvasTestTrait;
// cspell:ignore fieldbody
/**
* Tests the Layout Builder disables interactions of rendered blocks.
*
......
......@@ -8,6 +8,8 @@ use Drupal\block_content\Entity\BlockContentType;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
// cspell:ignore fieldbody
/**
* Tests the Layout Builder UI.
*
......
......@@ -8,6 +8,8 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
// cspell:ignore fieldbody fieldlinks
/**
* Tests moving blocks via the form.
*
......
......@@ -190,6 +190,7 @@ function locale_schema() {
],
'indexes' => [
'string_type' => ['sid', 'type'],
'type_name' => ['type', 'name'],
],
];
......@@ -347,3 +348,64 @@ function locale_update_10100(&$sandbox = NULL) {
$connection->schema()->changeField('locale_file', 'last_checked', 'last_checked', $new);
}
}
/**
* Add an index on locales_location on type and name.
*/
function locale_update_10300() {
$spec = [];
$spec['locales_location'] = [
'description' => 'Location information for source strings.',
'fields' => [
'lid' => [
'type' => 'serial',
'not null' => TRUE,
'description' => 'Unique identifier of this location.',
],
'sid' => [
'type' => 'int',
'not null' => TRUE,
'description' => 'Unique identifier of this string.',
],
'type' => [
'type' => 'varchar_ascii',
'length' => 50,
'not null' => TRUE,
'default' => '',
'description' => 'The location type (file, config, path, etc).',
],
'name' => [
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Type dependent location information (file name, path, etc).',
],
'version' => [
'type' => 'varchar_ascii',
'length' => 20,
'not null' => TRUE,
'default' => 'none',
'description' => 'Version of Drupal where the location was found.',
],
],
'primary key' => ['lid'],
'foreign keys' => [
'locales_source' => [
'table' => 'locales_source',
'columns' => ['sid' => 'lid'],
],
],
'indexes' => [
'string_type' => ['sid', 'type'],
'type_name' => ['type', 'name'],
],
];
$schema = \Drupal::database()->schema();
// If the update has been manually applied, recreate the index using the
// current schema.
if ($schema->indexExists('locales_location', 'type_name')) {
$schema->dropIndex('locales_location', 'type_name');
}
$schema->addIndex('locales_location', 'type_name', ['type', 'name'], $spec['locales_location']);
}
<?php
declare(strict_types=1);
namespace Drupal\Tests\locale\Functional;
use Drupal\FunctionalTests\Update\UpdatePathTestBase;
/**
* Tests Locale update functions.
*
* @group locale
*/
class LocalesLocationAddIndexUpdateTest extends UpdatePathTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setDatabaseDumpFiles() {
$this->databaseDumpFiles[] = $this->root . '/core/modules/system/tests/fixtures/update/drupal-10.3.0.filled.standard.php.gz';
}
/**
* Tests locale_update_10300().
*
* @see locale_update_10300
*/
public function testIndex(): void {
$this->assertFalse(\Drupal::database()
->schema()
->indexExists('locales_location', 'type_name'));
// Run updates and test them.
$this->runUpdates();
$this->assertTrue(\Drupal::database()
->schema()
->indexExists('locales_location', 'type_name'));
}
/**
* Tests locale_update_10300().
*
* @see locale_update_10300
*/
public function testExistingIndex(): void {
$spec = [];
$spec['locales_location'] = [
'description' => 'Location information for source strings.',
'fields' => [
'lid' => [
'type' => 'serial',
'not null' => TRUE,
'description' => 'Unique identifier of this location.',
],
'sid' => [
'type' => 'int',
'not null' => TRUE,
'description' => 'Unique identifier of this string.',
],
'type' => [
'type' => 'varchar_ascii',
'length' => 50,
'not null' => TRUE,
'default' => '',
'description' => 'The location type (file, config, path, etc).',
],
'name' => [
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
'description' => 'Type dependent location information (file name, path, etc).',
],
'version' => [
'type' => 'varchar_ascii',
'length' => 20,
'not null' => TRUE,
'default' => 'none',
'description' => 'Version of Drupal where the location was found.',
],
],
'primary key' => ['lid'],
'foreign keys' => [
'locales_source' => [
'table' => 'locales_source',
'columns' => ['sid' => 'lid'],
],
],
'indexes' => [
'string_type' => ['sid', 'type'],
'type_name' => ['type', 'name'],
],
];
\Drupal::database()->schema()->addIndex('locales_location', 'type_name', ['type', 'name', 'sid'], $spec['locales_location']);
// Run updates and test them.
$this->runUpdates();
// Ensure the update runs successfully even if an index existed prior to
// the update.
$schema = \Drupal::database()->schema();
$this->assertTrue($schema->indexExists('locales_location', 'type_name'));
}
}
......@@ -2,11 +2,10 @@
declare(strict_types=1);
namespace Drupal\Tests\media\Functional;
namespace Drupal\Tests\media\Kernel;
use Drupal\media\OEmbed\ProviderException;
use GuzzleHttp\Psr7\Utils;
use Prophecy\PhpUnit\ProphecyTrait;
/**
* Tests the oEmbed provider repository.
......@@ -15,14 +14,7 @@ use Prophecy\PhpUnit\ProphecyTrait;
*
* @group media
*/
class ProviderRepositoryTest extends MediaFunctionalTestBase {
use ProphecyTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
class ProviderRepositoryTest extends MediaKernelTestBase {
/**
* Tests that provider discovery fails if the provider database is empty.
......
......@@ -1059,13 +1059,13 @@ class MenuUiTest extends BrowserTestBase {
public function testMenuParentsJsAccess(): void {
$this->drupalLogin($this->drupalCreateUser(['administer menu']));
// Just check access to the callback overall, the POST data is irrelevant.
$this->drupalGet('admin/structure/menu/parents', ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With: XMLHttpRequest']);
$this->drupalGet('admin/structure/menu/parents', ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With' => 'XMLHttpRequest']);
$this->assertSession()->statusCodeEquals(200);
// Log in as authenticated user.
$this->drupalLogin($this->drupalCreateUser());
// Check that a simple user is not able to access the menu.
$this->drupalGet('admin/structure/menu/parents', ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With: XMLHttpRequest']);
$this->drupalGet('admin/structure/menu/parents', ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With' => 'XMLHttpRequest']);
$this->assertSession()->statusCodeEquals(403);
}
......
......@@ -20,7 +20,7 @@ use Drupal\migrate\MigrateSkipRowException;
* - method: (optional) What to do if the input value is empty. Possible values:
* - row: Skips the entire row when an empty value is encountered.
* - process: Prevents further processing of the input property when the value
* is empty.
* is empty and sets the value to NULL.
* - message: (optional) A message to be logged in the {migrate_message_*} table
* for this row. Messages are only logged for the 'row' method. If not set,
* nothing is logged in the message table.
......
......@@ -194,7 +194,7 @@ class PageCacheTest extends BrowserTestBase {
$this->assertSession()->statusCodeEquals(304);
// Ensure a conditional request without If-None-Match returns 200 OK.
$this->drupalGet('', [], ['If-Modified-Since' => $last_modified, 'If-None-Match' => NULL]);
$this->drupalGet('', [], ['If-Modified-Since' => $last_modified, 'If-None-Match' => '']);
// Verify the page is not printed twice when the cache is warm.
$this->assertSession()->responseNotMatches('#<html.*<html#');
$this->assertSession()->statusCodeEquals(200);
......
......@@ -338,7 +338,7 @@ class StyleSerializerEntityTest extends ViewTestBase {
$this->submitForm([], 'Save');
// Should return a 406. Emulates a sample Firefox header.
$this->drupalGet('test/serialize/field', [], ['Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8']);
$this->drupalGet('test/serialize/field', [], ['Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8']);
$this->assertSession()->responseHeaderEquals('content-type', 'text/html; charset=UTF-8');
$this->assertSession()->statusCodeEquals(406);
......
name: Single Directory Components
name: Single-Directory Components
type: module
description: 'Allows discovery and rendering of self-contained UI components.'
version: VERSION
......
......@@ -58,19 +58,6 @@ class BatchController implements ContainerInjectionInterface {
return $output;
}
elseif (isset($output)) {
// Directly render a status message placeholder without any messages.
// Messages are not intended to be show on the batch page, but in the
// event an error in a AJAX callback the messages will be displayed.
// @todo Remove in https://drupal.org/i/3396099.
$output['batch_messages'] = [
'#theme' => 'status_messages',
'#message_list' => [],
'#status_headings' => [
'status' => $this->t('Status message'),
'error' => $this->t('Error message'),
'warning' => $this->t('Warning message'),
],
];
$title = $output['#title'] ?? NULL;
$page = [
'#type' => 'page',
......
......@@ -64,6 +64,14 @@ class DevelopmentSettingsForm extends FormBase {
'checked' => TRUE,
],
];
$form['disable_rendered_output_cache_bins'] = [
'#type' => 'checkbox',
'#title' => $this->t('Do not cache markup'),
'#description' => $this->t('Disables render cache, dynamic page cache, and page cache.'),
'#default_value' => $development_settings->get('disable_rendered_output_cache_bins', FALSE),
];
$form['twig_development_mode'] = [
'#type' => 'checkbox',
'#title' => $this->t('Twig development mode'),
......@@ -98,13 +106,6 @@ class DevelopmentSettingsForm extends FormBase {
];
}
$form['disable_rendered_output_cache_bins'] = [
'#type' => 'checkbox',
'#title' => $this->t('Do not cache markup'),
'#description' => $this->t('Disables render cache, dynamic page cache, and page cache.'),
'#default_value' => $development_settings->get('disable_rendered_output_cache_bins', FALSE),
];
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = [
'#type' => 'submit',
......
......@@ -129,7 +129,7 @@ function ajax_forms_test_advanced_commands_css_callback($form, FormStateInterfac
function ajax_forms_test_advanced_commands_data_callback($form, FormStateInterface $form_state) {
$selector = '#data_div';
$response = new AjaxResponse();
$response->addCommand(new DataCommand($selector, 'testkey', 'test_value'));
$response->addCommand(new DataCommand($selector, 'test_key', 'test_value'));
return $response;
}
......
......@@ -730,6 +730,30 @@ class JavascriptStatesForm extends FormBase {
'#title' => 'Enable textarea',
];
$form['test_select_visible_dependence']['select_visible_1'] = [
'#type' => 'select',
'#title' => 'Select visible 1',
'#options' => [0 => 0, 1 => 1],
'#default_value' => 0,
];
$form['test_select_visible_dependence']['select_visible_2'] = [
'#type' => 'select',
'#title' => 'Select visible 2',
'#options' => [0 => 0, 1 => 1],
'#default_value' => 0,
];
$form['test_select_visible_dependence']['select_visible_3'] = [
'#type' => 'select',
'#title' => 'Select should show when 0 and 1 are selected',
'#options' => [0 => 0, 1 => 1],
'#states' => [
'visible' => [
':input[name="select_visible_1"]' => ['value' => 0],
':input[name="select_visible_2"]' => ['value' => 1],
],
],
];
return $form;
}
......
......@@ -149,7 +149,7 @@ class FrameworkTest extends BrowserTestBase {
* Decoded JSON.
*/
protected function drupalGetAjax($path, array $options = [], array $headers = []) {
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers = ['X-Requested-With' => 'XMLHttpRequest'];
if (!isset($options['query'][MainContentViewSubscriber::WRAPPER_FORMAT])) {
$options['query'][MainContentViewSubscriber::WRAPPER_FORMAT] = 'drupal_ajax';
}
......
......@@ -45,7 +45,7 @@ class ContentNegotiationTest extends BrowserTestBase {
'Android #2 (2012)' => 'text/xml,text/html,application/xhtml+xml,image/png,text/plain,*/*;q=0.8',
];
foreach ($tests as $case => $header) {
$this->drupalGet('', [], ['Accept: ' . $header]);
$this->drupalGet('', [], ['Accept' => $header]);
$this->assertSession()->pageTextNotContains('Unsupported Media Type');
$this->assertSession()->pageTextContains('Log in');
}
......
......@@ -191,7 +191,7 @@ class StorageTest extends BrowserTestBase {
$build_id = $this->assertSession()->hiddenFieldExists('form_build_id')->getValue();
// Try to poison the form cache.
$response = $this->drupalGet('form-test/form-storage-legacy/' . $build_id, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With: XMLHttpRequest']);
$response = $this->drupalGet('form-test/form-storage-legacy/' . $build_id, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With' => 'XMLHttpRequest']);
$original = json_decode($response, TRUE);
$this->assertEquals($original['form']['#build_id_old'], $build_id, 'Original build_id was recorded');
......@@ -208,7 +208,7 @@ class StorageTest extends BrowserTestBase {
$this->assertTrue($status, 'A watchdog message was logged by \Drupal::formBuilder()->setCache');
// Ensure that the form state was not poisoned by the preceding call.
$response = $this->drupalGet('form-test/form-storage-legacy/' . $build_id, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With: XMLHttpRequest']);
$response = $this->drupalGet('form-test/form-storage-legacy/' . $build_id, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With' => 'XMLHttpRequest']);
$original = json_decode($response, TRUE);
$this->assertEquals($original['form']['#build_id_old'], $build_id, 'Original build_id was recorded');
$this->assertNotEquals($original['form']['#build_id'], $build_id, 'New build_id was generated');
......
......@@ -298,7 +298,7 @@ class RouterTest extends BrowserTestBase {
// This will fail with a JSON parse error if the request is not routed to
// The correct controller.
$options['query'][MainContentViewSubscriber::WRAPPER_FORMAT] = 'drupal_ajax';
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers = ['X-Requested-With' => 'XMLHttpRequest'];
$this->drupalGet('/router_test/test10', $options, $headers);
$this->assertSession()->responseHeaderEquals('Content-Type', 'application/json');
......
......@@ -29,7 +29,7 @@ class StackSessionHandlerIntegrationTest extends BrowserTestBase {
*/
public function testRequest(): void {
$options['query'][MainContentViewSubscriber::WRAPPER_FORMAT] = 'drupal_ajax';
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers = ['X-Requested-With' => 'XMLHttpRequest'];
$actual_trace = json_decode($this->drupalGet('session-test/trace-handler', $options, $headers));
$sessionId = $this->getSessionCookies()->getCookieByName($this->getSessionName())->getValue();
$expect_trace = [
......
......@@ -9,7 +9,7 @@ use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\user\Entity\User;
// cspell:ignore hola usuario
// cspell:ignore hola testblock usuario
/**
* Runs UpdatePathTestBase with a dump filled with content.
......
......@@ -69,10 +69,10 @@ class MailTest extends KernelTestBase {
$this->assertInstanceOf(TestPhpMailFailure::class, $mail_backend);
// Add a module-specific mail backend.
$this->config('system.mail')->set('interface.my_module_testkey', 'test_mail_collector')->save();
$this->config('system.mail')->set('interface.my_module_test_key', 'test_mail_collector')->save();
// Get the added MailInterface class instance.
$mail_backend = \Drupal::service('plugin.manager.mail')->getInstance(['module' => 'my_module', 'key' => 'testkey']);
$mail_backend = \Drupal::service('plugin.manager.mail')->getInstance(['module' => 'my_module', 'key' => 'test_key']);
// Assert whether the added mail backend is an instance of the expected
// class.
......
......@@ -385,7 +385,7 @@ class ToolbarAdminMenuTest extends BrowserTestBase {
// Request a new page to refresh the drupalSettings object.
$subtrees_hash = $this->getSubtreesHash();
$this->drupalGet('toolbar/subtrees/' . $subtrees_hash, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With: XMLHttpRequest']);
$this->drupalGet('toolbar/subtrees/' . $subtrees_hash, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']], ['X-Requested-With' => 'XMLHttpRequest']);
$ajax_result = json_decode($this->getSession()->getPage()->getContent(), TRUE);
$this->assertEquals('setToolbarSubtrees', $ajax_result[0]['command'], 'Subtrees response uses the correct command.');
$this->assertEquals(['system-admin_content', 'system-admin_structure', 'system-themes_page', 'system-modules_list', 'system-admin_config', 'entity-user-collection', 'front'], array_keys($ajax_result[0]['subtrees']), 'Correct subtrees returned.');
......
......@@ -5,7 +5,7 @@ config:
actions:
user.role.administrator:
# If this role already exists, then this action has no effect. If it doesn't exist, we'll create it with the following values.
ensure_exists:
createIfNotExists:
id: administrator
label: Administrator
weight: 3
......
......@@ -5,7 +5,7 @@ config:
actions:
user.role.content_editor:
# If this role already exists, then this action has no effect. If it doesn't exist, we'll create it with the following values.
ensure_exists:
createIfNotExists:
id: content_editor
label: 'Content editor'
weight: 2
......
......@@ -20,5 +20,5 @@ config:
- block.block.claro_secondary_local_tasks
actions:
system.theme:
simple_config_update:
simpleConfigUpdate:
admin: claro
......@@ -25,5 +25,5 @@ config:
- core.date_format.olivero_medium
actions:
system.theme:
simple_config_update:
simpleConfigUpdate:
default: olivero
......@@ -36,7 +36,7 @@ config:
# mapped to the \Drupal\user\Entity\Role::grantPermission() method.
actions:
user.role.editor:
ensure_exists:
createIfNotExists:
label: 'Editor'
grantPermissions:
- 'delete any article content'
......
......@@ -11,7 +11,7 @@ config:
- system.menu.footer
actions:
core.menu.static_menu_link_overrides:
simple_config_update:
simpleConfigUpdate:
definitions.contact__site_page:
menu_name: footer
parent: ''
......
......@@ -64,10 +64,10 @@ config:
- views.view.who_s_online
actions:
node.settings:
simple_config_update:
simpleConfigUpdate:
use_admin_theme: true
system.site:
simple_config_update:
simpleConfigUpdate:
page.front: /node
user.role.anonymous:
grantPermission: 'access content'
......@@ -96,7 +96,7 @@ config:
- 'delete own %bundle content'
- 'edit own %bundle content'
user.settings:
simple_config_update:
simpleConfigUpdate:
verify_mail: true
register: visitors_admin_approval
cancel_method: user_cancel_block
......@@ -102,7 +102,7 @@ class CommandsTest extends WebDriverTestBase {
// Tests the 'data' command.
$page->pressButton("AJAX data command: Issue command.");
$this->assertTrue($page->waitFor(10, function () use ($session) {
return 'test_value' === $session->evaluateScript('window.jQuery("#data_div").data("testkey")');
return 'test_value' === $session->evaluateScript('window.jQuery("#data_div").data("test_key")');
}));
// Tests the 'html' command.
......
......@@ -8,6 +8,8 @@ use Drupal\ajax_test\Controller\AjaxTestController;
use Drupal\Core\Ajax\OpenModalDialogWithUrl;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
// cspell:ignore testdialog
/**
* Performs tests on opening and manipulating dialogs via AJAX commands.
*
......
......@@ -443,6 +443,15 @@ class JavascriptStatesTest extends WebDriverTestBase {
$this->assertFalse($item_visible_value2->isVisible());
$this->assertTrue($textfield_visible_value3->isVisible());
$this->assertTrue($textfield_visible_value2_or_value3->isVisible());
$this->container->get('module_installer')->install(['big_pipe']);
$this->drupalGet('form-test/javascript-states-form');
$select_visible_2 = $this->assertSession()->elementExists('css', 'select[name="select_visible_2"]');
$select_visible_3 = $this->assertSession()->elementExists('css', 'select[name="select_visible_3"]');
$this->assertFalse($select_visible_3->isVisible());
$select_visible_2->setValue('1');
$this->assertTrue($select_visible_3->isVisible());
}
/**
......
......@@ -16,7 +16,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The status code.
*/
public function statusCodeEquals($code) {
@trigger_error('Support for statusCodeEquals is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::statusCodeEquals() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::statusCodeEquals($code);
}
......@@ -27,7 +27,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The status code.
*/
public function statusCodeNotEquals($code) {
@trigger_error('Support for statusCodeNotEquals is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::statusCodeNotEquals() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::statusCodeNotEquals($code);
}
......@@ -40,7 +40,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderEquals($name, $value) {
@trigger_error('Support for responseHeaderEquals is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderEquals() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderEquals($name, $value);
}
......@@ -53,7 +53,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderNotEquals($name, $value) {
@trigger_error('Support for responseHeaderNotEquals is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderNotEquals() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderNotEquals($name, $value);
}
......@@ -66,7 +66,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderContains($name, $value) {
@trigger_error('Support for responseHeaderContains is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderContains() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderContains($name, $value);
}
......@@ -79,7 +79,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderNotContains($name, $value) {
@trigger_error('Support for responseHeaderNotContains is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderNotContains() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderNotContains($name, $value);
}
......@@ -92,7 +92,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderMatches($name, $regex) {
@trigger_error('Support for responseHeaderMatches is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderMatches() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderMatches($name, $regex);
}
......@@ -105,7 +105,7 @@ class WebDriverWebAssert extends JSWebAssert {
* The value to check the header against.
*/
public function responseHeaderNotMatches($name, $regex) {
@trigger_error('Support for responseHeaderNotMatches is to be dropped from JavaScript tests. See https://www.drupal.org/node/2857562.');
@trigger_error('WebDriverWebAssert::responseHeaderNotMatches() is deprecated in drupal:8.4.0 and is removed in drupal:12.0.0. See https://www.drupal.org/node/2857562', E_USER_DEPRECATED);
parent::responseHeaderNotMatches($name, $regex);
}
......
......@@ -33,15 +33,15 @@ class ConfigActionTest extends KernelTestBase {
$this->assertCount(0, \Drupal::entityTypeManager()->getStorage('config_test')->loadMultiple(), 'There are no config_test entities');
/** @var \Drupal\Core\Config\Action\ConfigActionManager $manager */
$manager = $this->container->get('plugin.manager.config_action');
$manager->applyAction('entity_create:ensure_exists', 'config_test.dynamic.action_test', ['label' => 'Action test']);
$manager->applyAction('entity_create:createIfNotExists', 'config_test.dynamic.action_test', ['label' => 'Action test']);
/** @var \Drupal\config_test\Entity\ConfigTest[] $config_test_entities */
$config_test_entities = \Drupal::entityTypeManager()->getStorage('config_test')->loadMultiple();
$this->assertCount(1, \Drupal::entityTypeManager()->getStorage('config_test')->loadMultiple(), 'There is 1 config_test entity');
$this->assertSame('Action test', $config_test_entities['action_test']->label());
$this->assertTrue(Uuid::isValid((string) $config_test_entities['action_test']->uuid()), 'Config entity assigned a valid UUID');
// Calling ensure exists action again will not error.
$manager->applyAction('entity_create:ensure_exists', 'config_test.dynamic.action_test', ['label' => 'Action test']);
// Calling createIfNotExists action again will not error.
$manager->applyAction('entity_create:createIfNotExists', 'config_test.dynamic.action_test', ['label' => 'Action test']);
try {
$manager->applyAction('entity_create:create', 'config_test.dynamic.action_test', ['label' => 'Action test']);
......@@ -244,11 +244,11 @@ class ConfigActionTest extends KernelTestBase {
/** @var \Drupal\Core\Config\Action\ConfigActionManager $manager */
$manager = $this->container->get('plugin.manager.config_action');
// Call the simple config update action.
$manager->applyAction('simple_config_update', 'config_test.system', ['foo' => 'Yay!']);
$manager->applyAction('simpleConfigUpdate', 'config_test.system', ['foo' => 'Yay!']);
$this->assertSame('Yay!', $this->config('config_test.system')->get('foo'));
try {
$manager->applyAction('simple_config_update', 'config_test.system', 'Test');
$manager->applyAction('simpleConfigUpdate', 'config_test.system', 'Test');
$this->fail('Expected exception not thrown');
}
catch (ConfigActionException $e) {
......@@ -257,7 +257,7 @@ class ConfigActionTest extends KernelTestBase {
$this->config('config_test.system')->delete();
try {
$manager->applyAction('simple_config_update', 'config_test.system', ['foo' => 'Yay!']);
$manager->applyAction('simpleConfigUpdate', 'config_test.system', ['foo' => 'Yay!']);
$this->fail('Expected exception not thrown');
}
catch (ConfigActionException $e) {
......@@ -273,7 +273,7 @@ class ConfigActionTest extends KernelTestBase {
$this->assertCount(0, $storage->loadMultiple(), 'There are no config_test entities');
/** @var \Drupal\Core\Config\Action\ConfigActionManager $manager */
$manager = $this->container->get('plugin.manager.config_action');
$manager->applyAction('ensure_exists', 'config_test.dynamic.action_test', ['label' => 'Action test', 'protected_property' => '']);
$manager->applyAction('createIfNotExists', 'config_test.dynamic.action_test', ['label' => 'Action test', 'protected_property' => '']);
/** @var \Drupal\config_test\Entity\ConfigTest[] $config_test_entities */
$config_test_entities = $storage->loadMultiple();
$this->assertCount(1, $config_test_entities, 'There is 1 config_test entity');
......@@ -299,7 +299,7 @@ class ConfigActionTest extends KernelTestBase {
$manager = $this->container->get('plugin.manager.config_action');
$this->expectException(DuplicateConfigActionIdException::class);
$this->expectExceptionMessage("The plugins 'entity_method:config_test.dynamic:setProtectedProperty' and 'config_action_duplicate_test:config_test.dynamic:setProtectedProperty' both resolve to the same shorthand action ID for the 'config_test' entity type");
$manager->applyAction('ensure_exists', 'config_test.dynamic.action_test', ['label' => 'Action test', 'protected_property' => '']);
$manager->applyAction('createIfNotExists', 'config_test.dynamic.action_test', ['label' => 'Action test', 'protected_property' => '']);
}
/**
......
......@@ -77,7 +77,7 @@ name: Config actions making bad decisions
config:
actions:
$config_name:
simple_config_update:
simpleConfigUpdate:
$label_key: ''
YAML;
......@@ -118,7 +118,7 @@ name: Config actions making bad decisions
config:
actions:
random.config:
simple_config_update:
simpleConfigUpdate:
label: ''
YAML;
......
......@@ -208,7 +208,7 @@ install:
config:
actions:
config_test.dynamic.recipe:
ensure_exists:
createIfNotExists:
label: 'Created by recipe'
setBody: 'Description set by recipe'
YAML;
......@@ -219,6 +219,27 @@ YAML;
RecipeRunner::processRecipe($recipe);
}
/**
* Tests that renamed plugins are marked as deprecated.
*
* @group legacy
*/
public function testRenamedConfigActions(): void {
$recipe_data = <<<YAML
name: Renamed config action
install:
- config_test
config:
actions:
config_test.dynamic.recipe:
ensure_exists:
label: 'Created by recipe'
YAML;
$recipe = $this->createRecipe($recipe_data);
$this->expectDeprecation('The plugin ID "entity_create:ensure_exists" is deprecated in drupal:10.3.1 and will be removed in drupal:12.0.0. Use "entity_create:createIfNotExists" instead. See https://www.drupal.org/node/3458273.');
RecipeRunner::processRecipe($recipe);
}
public function testRecipesAreDisambiguatedByPath(): void {
$recipe_data = <<<YAML
name: 'Recipe include'
......
......@@ -264,7 +264,7 @@ install:
config:
actions:
config_test.dynamic.recipe:
ensure_exists:
createIfNotExists:
label: 'Created by recipe'
setProtectedProperty: 'Set by recipe'
YAML,
......
......@@ -122,7 +122,7 @@ name: 'Wildcards gone wild...'
config:
actions:
$expression:
simple_config_update:
simpleConfigUpdate:
label: 'Changed by config action'
YAML;
$recipe = $this->createRecipe($contents);
......
// cspell:ignore is-autocompleting
module.exports = {
'@tags': ['core'],
......@@ -28,7 +30,8 @@ module.exports = {
.waitForElementVisible('body', 1000);
// Tests that entering a character from the
// data-autocomplete-first-character-blacklist doesn't start autocompleting.
// data-autocomplete-first-character-blacklist doesn't start the
// autocomplete process.
browser
.setValue('[name="autocomplete_4"]', '/')
.pause(1000)
......
......@@ -462,6 +462,19 @@ class FormValidatorTest extends UnitTestCase {
'Test cannot be longer than <em class="placeholder">7</em> characters but is currently <em class="placeholder">8</em> characters long.',
FALSE,
],
[
[
'#type' => 'select',
'#options' => [
'foo' => 'Foo',
'bar' => 'Bar',
],
'#value' => [[]],
'#multiple' => TRUE,
],
'The submitted value type <em class="placeholder">array</em> in the <em class="placeholder">Test</em> element is not allowed.',
TRUE,
],
];
}
......
......@@ -157,7 +157,7 @@ class MailManagerTest extends UnitTestCase {
public function testGetInstance(): void {
$interface = [
'default' => 'php_mail',
'example_testkey' => 'test_mail_collector',
'example_test_key' => 'test_mail_collector',
];
$this->setUpMailManager($interface);
......@@ -167,7 +167,7 @@ class MailManagerTest extends UnitTestCase {
$this->assertInstanceOf('Drupal\Core\Mail\Plugin\Mail\PhpMail', $instance);
// Test that a matching message_id returns the specified plugin instance.
$options = ['module' => 'example', 'key' => 'testkey'];
$options = ['module' => 'example', 'key' => 'test_key'];
$instance = $this->mailManager->getInstance($options);
$this->assertInstanceOf('Drupal\Core\Mail\Plugin\Mail\TestMailCollector', $instance);
}
......@@ -180,7 +180,7 @@ class MailManagerTest extends UnitTestCase {
public function testMailInRenderContext(): void {
$interface = [
'default' => 'php_mail',
'example_testkey' => 'test_mail_collector',
'example_test_key' => 'test_mail_collector',
];
$this->setUpMailManager($interface);
......
......@@ -5,9 +5,9 @@ install:
config:
actions:
config_test.dynamic.recipe:
ensure_exists:
createIfNotExists:
label: 'Created by recipe'
setProtectedProperty: 'Set by recipe'
config_test.system:
simple_config_update:
simpleConfigUpdate:
foo: 'not bar'
......@@ -5,5 +5,5 @@ install:
config:
actions:
node.settings:
simple_config_update:
simpleConfigUpdate:
use_admin_theme: true
......@@ -5,5 +5,5 @@ recipes:
config:
actions:
node.settings:
simple_config_update:
simpleConfigUpdate:
use_admin_theme: true
......@@ -5,5 +5,5 @@ recipes:
config:
actions:
node.settings:
simple_config_update:
simpleConfigUpdate:
use_admin_theme: true
......@@ -15,5 +15,5 @@ config:
# This will cause a validation error, which will trigger a rollback.
# The rollback should fail, since the Media module can't be uninstalled
# now that the plain_text format is using one of its filters.
simple_config_update:
simpleConfigUpdate:
non_existent_key: whatever!
......@@ -152,6 +152,7 @@ libraries-extend:
- claro/drupal.node.preview
views/views.module:
- claro/views
views_ui/admin.styling:
- claro/views_ui
media/media_embed_ckeditor_theme:
- claro/classy.media_embed_ckeditor_theme
......
......@@ -12,6 +12,8 @@
* @see autocomplete.js
*/
/* cspell:ignore is-autocompleting */
/**
* Since the autocomplete library is attached conditionally and not globally,
* we can be 99% sure that the default icon will be used.
......@@ -19,14 +21,14 @@
* autocomplete input's background — until are sure that it will be pushed by
* the server with HTTP/2.
*
* The autocompleting (active) state's background-image is inlined because
* non-used CSS selectors are usually ignored; popular browsers don't download
* their 'url' references.
* The active autocomplete state's background-image is inlined because non-used
* CSS selectors are usually ignored; popular browsers don't download their
* 'url' references.
* If these selectors become active, the browser needs some time for painting
* previously ignored remote asset: it should get it from server, parse it and
* repaint the background of autocomplete field. With the inlined background we
* can prevent an additional timeout caused by a new request/response pair.
* Besides this, the autocompleting event itself may easily finish before the
* Besides this, the autocomplete event itself may easily finish before the
* missing asset gets downloaded/parsed/painted, and the missing instant visual
* feedback would be a usability/accessibility issue as well.
*/
......@@ -53,7 +55,7 @@
}
/**
* Autocomplete wrapper for autocompleting message.
* Autocomplete wrapper for autocomplete message.
*/
.claro-autocomplete {
......
......@@ -5,6 +5,8 @@
* @see autocomplete.js
*/
/* cspell:ignore is-autocompleting */
/**
* Since the autocomplete library is attached conditionally and not globally,
* we can be 99% sure that the default icon will be used.
......@@ -12,14 +14,14 @@
* autocomplete input's background — until are sure that it will be pushed by
* the server with HTTP/2.
*
* The autocompleting (active) state's background-image is inlined because
* non-used CSS selectors are usually ignored; popular browsers don't download
* their 'url' references.
* The active autocomplete state's background-image is inlined because non-used
* CSS selectors are usually ignored; popular browsers don't download their
* 'url' references.
* If these selectors become active, the browser needs some time for painting
* previously ignored remote asset: it should get it from server, parse it and
* repaint the background of autocomplete field. With the inlined background we
* can prevent an additional timeout caused by a new request/response pair.
* Besides this, the autocompleting event itself may easily finish before the
* Besides this, the autocomplete event itself may easily finish before the
* missing asset gets downloaded/parsed/painted, and the missing instant visual
* feedback would be a usability/accessibility issue as well.
*/
......@@ -50,7 +52,7 @@
}
/**
* Autocomplete wrapper for autocompleting message.
* Autocomplete wrapper for autocomplete message.
*/
.claro-autocomplete {
position: relative;
......
......@@ -28,33 +28,23 @@
padding: 0;
}
.table-file-multiple-widget .tabledrag-handle {
float: left; /* LTR */
}
[dir="rtl"] .table-file-multiple-widget .tabledrag-handle {
float: right;
.table-file-multiple-widget .tabledrag-handle,
.table-file-multiple-widget .tabledrag-changed {
float: left;
}
.table-file-multiple-widget .tabledrag-changed {
float: left; /* LTR */
line-height: calc(var(--tabledrag-handle-icon-size) + calc(var(--space-xs) * 2));
}
[dir="rtl"] .table-file-multiple-widget .tabledrag-changed {
float: left;
}
.table-file-multiple-widget td {
height: calc(var(--space-m) * 3);
padding-block: var(--space-m);
}
.table-file-multiple-widget td > :first-child {
margin-top: 0;
}
.table-file-multiple-widget td > :first-child,
.table-file-multiple-widget td > :last-child {
margin-bottom: 0;
margin-block: 0;
}
.table-file-multiple-widget .button.button:only-child {
......@@ -68,20 +58,19 @@
font-size: var(--font-size-s);
}
.table-file-multiple-widget td {
padding-top: var(--space-m);
padding-bottom: var(--space-m);
}
.table-file-multiple-widget .tabledrag-cell {
padding-top: var(--space-xs);
padding-bottom: var(--space-xs);
padding-block: var(--space-xs);
}
.table-file-multiple-widget .checkbox .form-type--boolean {
line-height: calc(var(--space-m) * 3);
}
[dir="rtl"] .table-file-multiple-widget .tabledrag-handle,
[dir="rtl"] .table-file-multiple-widget .tabledrag-changed {
float: right;
}
.no-touchevents .table-file-multiple-widget .checkbox .form-type--boolean {
line-height: var(--line-height);
}
......@@ -101,7 +90,7 @@
*/
.table-file-multiple-widget--no-upload > tbody:last-child > tr:last-child {
border-bottom: 0;
border-block-end: 0;
}
/**
......@@ -110,12 +99,9 @@
@media screen and (max-width: 37.5em) {
.claro-details__wrapper .file-widget-multiple__table-wrapper {
margin-right: calc(var(--space-m) * -1);
margin-left: calc(var(--space-m) * -1);
margin-inline: calc(var(--space-m) * -1);
}
.claro-details__wrapper .file-widget-multiple__table-wrapper > :not(table) {
margin-right: var(--space-m);
margin-left: var(--space-m);
margin-inline: var(--space-m);
}
}
......@@ -3,73 +3,59 @@
* Styles for multiple file widget table.
*/
.table-file-multiple-widget tbody {
vertical-align: top;
}
.table-file-multiple-widget .tabledrag-cell-content {
position: relative;
display: block;
height: auto;
}
.table-file-multiple-widget .tabledrag-cell-content > * {
display: block;
}
.table-file-multiple-widget .tabledrag-cell-content__item {
padding: 0;
}
.table-file-multiple-widget .tabledrag-handle {
float: left; /* LTR */
}
[dir="rtl"] .table-file-multiple-widget .tabledrag-handle {
float: right;
}
.table-file-multiple-widget .tabledrag-changed {
float: left; /* LTR */
line-height: calc(var(--tabledrag-handle-icon-size) + calc(var(--space-xs) * 2));
}
[dir="rtl"] .table-file-multiple-widget .tabledrag-changed {
float: left;
}
.table-file-multiple-widget td {
height: calc(var(--space-m) * 3);
}
.table-file-multiple-widget td > :first-child {
margin-top: 0;
}
.table-file-multiple-widget td > :last-child {
margin-bottom: 0;
}
.table-file-multiple-widget .button.button:only-child {
margin: 0;
}
.table-file-multiple-widget th {
height: calc(var(--space-m) * 2);
color: var(--color-gray-800);
background: var(--color-gray-050);
font-size: var(--font-size-s);
}
.table-file-multiple-widget td {
padding-top: var(--space-m);
padding-bottom: var(--space-m);
}
.table-file-multiple-widget .tabledrag-cell {
padding-top: var(--space-xs);
padding-bottom: var(--space-xs);
.table-file-multiple-widget {
& tbody {
vertical-align: top;
}
& .tabledrag-cell-content {
position: relative;
display: block;
height: auto;
& > * {
display: block;
}
}
& .tabledrag-cell-content__item {
padding: 0;
}
& .tabledrag-handle,
& .tabledrag-changed {
float: left;
}
& .tabledrag-changed {
line-height: calc(var(--tabledrag-handle-icon-size) + calc(var(--space-xs) * 2));
}
& td {
height: calc(var(--space-m) * 3);
padding-block: var(--space-m);
& > :first-child,
& > :last-child {
margin-block: 0;
}
}
& .button.button:only-child {
margin: 0;
}
& th {
height: calc(var(--space-m) * 2);
color: var(--color-gray-800);
background: var(--color-gray-050);
font-size: var(--font-size-s);
}
& .tabledrag-cell {
padding-block: var(--space-xs);
}
& .checkbox .form-type--boolean {
line-height: calc(var(--space-m) * 3);
}
}
.table-file-multiple-widget .checkbox .form-type--boolean {
line-height: calc(var(--space-m) * 3);
[dir="rtl"] .table-file-multiple-widget {
& .tabledrag-handle,
& .tabledrag-changed {
float: right;
}
}
.no-touchevents .table-file-multiple-widget .checkbox .form-type--boolean {
......@@ -89,7 +75,7 @@
* (A full file widget with limited cardinality.)
*/
.table-file-multiple-widget--no-upload > tbody:last-child > tr:last-child {
border-bottom: 0;
border-block-end: 0;
}
/**
......@@ -97,12 +83,9 @@
*/
@media screen and (max-width: 37.5em) {
.claro-details__wrapper .file-widget-multiple__table-wrapper {
margin-right: calc(var(--space-m) * -1);
margin-left: calc(var(--space-m) * -1);
}
.claro-details__wrapper .file-widget-multiple__table-wrapper > :not(table) {
margin-right: var(--space-m);
margin-left: var(--space-m);
margin-inline: calc(var(--space-m) * -1);
& > :not(table) {
margin-inline: var(--space-m);
}
}
}
......@@ -3,6 +3,8 @@
* Claro's enhancement for autocomplete form element.
*/
// cspell:ignore is-autocompleting
(($, Drupal, once) => {
Drupal.behaviors.claroAutoCompete = {
attach(context) {
......
......@@ -110,3 +110,9 @@
display: flex;
justify-content: space-between;
}
/* Reset width set by layout.css */
body.is-fixed .site-header__inner__container {
width: auto;
}
......@@ -105,3 +105,8 @@ body:not(.is-always-mobile-nav) .site-header__fixable.is-fixed:not(.is-expanded)
display: flex;
justify-content: space-between;
}
/* Reset width set by layout.css */
body.is-fixed .site-header__inner__container {
width: auto;
}
......@@ -3033,17 +3033,17 @@
},
{
"name": "drupal/core",
"version": "10.3.0",
"version_normalized": "10.3.0.0",
"version": "10.3.1",
"version_normalized": "10.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/drupal/core.git",
"reference": "6f1af3070110d7d0f2a6671bea26add34667f765"
"reference": "d137403a30d4154404e473785f48dfc889d77e23"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/drupal/core/zipball/6f1af3070110d7d0f2a6671bea26add34667f765",
"reference": "6f1af3070110d7d0f2a6671bea26add34667f765",
"url": "https://api.github.com/repos/drupal/core/zipball/d137403a30d4154404e473785f48dfc889d77e23",
"reference": "d137403a30d4154404e473785f48dfc889d77e23",
"shasum": ""
},
"require": {
......@@ -3123,7 +3123,7 @@
"suggest": {
"ext-zip": "Needed to extend the plugin.manager.archiver service capability with the handling of files in the ZIP format."
},
"time": "2024-06-20T18:58:42+00:00",
"time": "2024-07-04T11:33:45+00:00",
"type": "drupal-core",
"extra": {
"drupal-scaffold": {
......@@ -3201,14 +3201,14 @@
],
"description": "Drupal is an open source content management platform powering millions of websites and applications.",
"support": {
"source": "https://github.com/drupal/core/tree/10.3.0"
"source": "https://github.com/drupal/core/tree/10.3.1"
},
"install-path": "../../core"
},
{
"name": "drupal/core-composer-scaffold",
"version": "10.3.0",
"version_normalized": "10.3.0.0",
"version": "10.3.1",
"version_normalized": "10.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-composer-scaffold.git",
......@@ -3254,14 +3254,14 @@
"drupal"
],
"support": {
"source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.0"
"source": "https://github.com/drupal/core-composer-scaffold/tree/10.3.1"
},
"install-path": "../drupal/core-composer-scaffold"
},
{
"name": "drupal/core-project-message",
"version": "10.3.0",
"version_normalized": "10.3.0.0",
"version": "10.3.1",
"version_normalized": "10.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-project-message.git",
......@@ -3304,17 +3304,17 @@
},
{
"name": "drupal/core-recommended",
"version": "10.3.0",
"version_normalized": "10.3.0.0",
"version": "10.3.1",
"version_normalized": "10.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/drupal/core-recommended.git",
"reference": "991f849f74e585597b1f7b11daf9acf79b546939"
"reference": "a5183f2be315b7e5deec89fdeafe9fc9a2e54f57"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/drupal/core-recommended/zipball/991f849f74e585597b1f7b11daf9acf79b546939",
"reference": "991f849f74e585597b1f7b11daf9acf79b546939",
"url": "https://api.github.com/repos/drupal/core-recommended/zipball/a5183f2be315b7e5deec89fdeafe9fc9a2e54f57",
"reference": "a5183f2be315b7e5deec89fdeafe9fc9a2e54f57",
"shasum": ""
},
"require": {
......@@ -3323,7 +3323,7 @@
"doctrine/annotations": "~1.14.3",
"doctrine/deprecations": "~1.1.3",
"doctrine/lexer": "~2.1.1",
"drupal/core": "10.3.0",
"drupal/core": "10.3.1",
"egulias/email-validator": "~4.0.2",
"guzzlehttp/guzzle": "~7.8.1",
"guzzlehttp/promises": "~2.0.2",
......@@ -3377,7 +3377,7 @@
"conflict": {
"webflo/drupal-core-strict": "*"
},
"time": "2024-06-20T18:58:42+00:00",
"time": "2024-07-04T11:33:45+00:00",
"type": "metapackage",
"notification-url": "https://packagist.org/downloads/",
"license": [
......@@ -3385,7 +3385,7 @@
],
"description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.",
"support": {
"source": "https://github.com/drupal/core-recommended/tree/10.3.0"
"source": "https://github.com/drupal/core-recommended/tree/10.3.1"
},
"install-path": null
},
......
......@@ -3,7 +3,7 @@
'name' => 'drupal/recommended-project',
'pretty_version' => '10.3.x-dev',
'version' => '10.3.9999999.9999999-dev',
'reference' => 'd5d3a9a4c04c7d1e169cf2acf18008a3e4c73fc6',
'reference' => 'a8127491e88d6a95ce4c3f41f0fa576c9874bb25',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
......@@ -416,9 +416,9 @@
'dev_requirement' => false,
),
'drupal/core' => array(
'pretty_version' => '10.3.0',
'version' => '10.3.0.0',
'reference' => '6f1af3070110d7d0f2a6671bea26add34667f765',
'pretty_version' => '10.3.1',
'version' => '10.3.1.0',
'reference' => 'd137403a30d4154404e473785f48dfc889d77e23',
'type' => 'drupal-core',
'install_path' => __DIR__ . '/../../core',
'aliases' => array(),
......@@ -427,24 +427,24 @@
'drupal/core-annotation' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-assertion' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-class-finder' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-composer-scaffold' => array(
'pretty_version' => '10.3.0',
'version' => '10.3.0.0',
'pretty_version' => '10.3.1',
'version' => '10.3.1.0',
'reference' => 'a1a186caeb89899143e0c6912ccee9d3d7181dbe',
'type' => 'composer-plugin',
'install_path' => __DIR__ . '/../drupal/core-composer-scaffold',
......@@ -454,90 +454,90 @@
'drupal/core-datetime' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-dependency-injection' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-diff' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-discovery' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-event-dispatcher' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-file-cache' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-file-security' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-filesystem' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-front-matter' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-gettext' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-graph' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-http-foundation' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-php-storage' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-plugin' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-project-message' => array(
'pretty_version' => '10.3.0',
'version' => '10.3.0.0',
'pretty_version' => '10.3.1',
'version' => '10.3.1.0',
'reference' => 'd1da83722735cb0f7ccabf9fef7b5607b442c3a8',
'type' => 'composer-plugin',
'install_path' => __DIR__ . '/../drupal/core-project-message',
......@@ -547,13 +547,13 @@
'drupal/core-proxy-builder' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-recommended' => array(
'pretty_version' => '10.3.0',
'version' => '10.3.0.0',
'reference' => '991f849f74e585597b1f7b11daf9acf79b546939',
'pretty_version' => '10.3.1',
'version' => '10.3.1.0',
'reference' => 'a5183f2be315b7e5deec89fdeafe9fc9a2e54f57',
'type' => 'metapackage',
'install_path' => null,
'aliases' => array(),
......@@ -562,37 +562,37 @@
'drupal/core-render' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-serialization' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-transliteration' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-utility' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-uuid' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/core-version' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '10.3.0',
0 => '10.3.1',
),
),
'drupal/crop' => array(
......@@ -1102,7 +1102,7 @@
'drupal/recommended-project' => array(
'pretty_version' => '10.3.x-dev',
'version' => '10.3.9999999.9999999-dev',
'reference' => 'd5d3a9a4c04c7d1e169cf2acf18008a3e4c73fc6',
'reference' => 'a8127491e88d6a95ce4c3f41f0fa576c9874bb25',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment