diff --git a/core/modules/image/config/install/image.style.large.yml b/core/modules/image/config/install/image.style.large.yml index c7935849a9..619019558a 100644 --- a/core/modules/image/config/install/image.style.large.yml +++ b/core/modules/image/config/install/image.style.large.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: large label: 'Large (480×480)' +description: null effects: ddd73aa7-4bd6-4c85-b600-bdf2b1628d1d: uuid: ddd73aa7-4bd6-4c85-b600-bdf2b1628d1d diff --git a/core/modules/image/config/install/image.style.medium.yml b/core/modules/image/config/install/image.style.medium.yml index 775a511b0c..df5818cb61 100644 --- a/core/modules/image/config/install/image.style.medium.yml +++ b/core/modules/image/config/install/image.style.medium.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: medium label: 'Medium (220×220)' +description: null effects: bddf0d06-42f9-4c75-a700-a33cafa25ea0: uuid: bddf0d06-42f9-4c75-a700-a33cafa25ea0 diff --git a/core/modules/image/config/install/image.style.thumbnail.yml b/core/modules/image/config/install/image.style.thumbnail.yml index 73dc9b85c2..1111392da5 100644 --- a/core/modules/image/config/install/image.style.thumbnail.yml +++ b/core/modules/image/config/install/image.style.thumbnail.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: thumbnail label: 'Thumbnail (100×100)' +description: null effects: 1cfec298-8620-4749-b100-ccb6c4500779: uuid: 1cfec298-8620-4749-b100-ccb6c4500779 diff --git a/core/modules/image/config/install/image.style.wide.yml b/core/modules/image/config/install/image.style.wide.yml index ede2f793f9..d586638e62 100644 --- a/core/modules/image/config/install/image.style.wide.yml +++ b/core/modules/image/config/install/image.style.wide.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: wide label: 'Wide (1090)' +description: null effects: 09959c15-59ce-4f6d-90df-e2d7cf32bce5: uuid: 09959c15-59ce-4f6d-90df-e2d7cf32bce5 diff --git a/core/modules/image/config/schema/image.schema.yml b/core/modules/image/config/schema/image.schema.yml index 4fcb6c7c59..50e16b1479 100644 --- a/core/modules/image/config/schema/image.schema.yml +++ b/core/modules/image/config/schema/image.schema.yml @@ -9,6 +9,10 @@ image.style.*: label: type: label label: 'Label' + description: + type: text + label: 'Description' + nullable: true effects: type: sequence sequence: diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php index 39e7263fca..2158cce20e 100644 --- a/core/modules/image/src/Entity/ImageStyle.php +++ b/core/modules/image/src/Entity/ImageStyle.php @@ -49,7 +49,8 @@ * config_prefix = "style", * entity_keys = { * "id" = "name", - * "label" = "label" + * "label" = "label", + * "description" = "description", * }, * links = { * "flush-form" = "/admin/config/media/image-styles/manage/{image_style}/flush", @@ -60,6 +61,7 @@ * config_export = { * "name", * "label", + * "description", * "effects", * } * ) @@ -80,6 +82,13 @@ class ImageStyle extends ConfigEntityBase implements ImageStyleInterface, Entity */ protected $label; + /** + * The image style description. + * + * @var string + */ + protected $description; + /** * The array of image effects for this image style. * @@ -440,6 +449,13 @@ public function setName($name) { return $this; } + /** + * {@inheritdoc} + */ + public function getDescription(): ?string { + return $this->get('description'); + } + /** * Returns the image effect plugin manager. * diff --git a/core/modules/image/src/Form/ImageStyleFormBase.php b/core/modules/image/src/Form/ImageStyleFormBase.php index 166faa8f64..b4968fa1b7 100644 --- a/core/modules/image/src/Form/ImageStyleFormBase.php +++ b/core/modules/image/src/Form/ImageStyleFormBase.php @@ -64,6 +64,12 @@ public function form(array $form, FormStateInterface $form_state) { '#default_value' => $this->entity->id(), '#required' => TRUE, ]; + $form['description'] = [ + '#type' => 'textarea', + '#title' => $this->t('Image style description'), + '#default_value' => $this->entity->getDescription(), + '#description' => $this->t('This text will be displayed on the Image styles page.'), + ]; return parent::form($form, $form_state); } diff --git a/core/modules/image/src/ImageStyleInterface.php b/core/modules/image/src/ImageStyleInterface.php index d3306e5d15..812429fcb5 100644 --- a/core/modules/image/src/ImageStyleInterface.php +++ b/core/modules/image/src/ImageStyleInterface.php @@ -28,6 +28,14 @@ public function getName(); */ public function setName($name); + /** + * Returns the description of the image style. + * + * @return string|null + * The description of image style. + */ + public function getDescription(): ?string; + /** * Returns the URI of this image when using this style. * diff --git a/core/modules/image/src/ImageStyleListBuilder.php b/core/modules/image/src/ImageStyleListBuilder.php index 41d9220b89..751cfcac5e 100644 --- a/core/modules/image/src/ImageStyleListBuilder.php +++ b/core/modules/image/src/ImageStyleListBuilder.php @@ -18,6 +18,7 @@ class ImageStyleListBuilder extends ConfigEntityListBuilder { */ public function buildHeader() { $header['label'] = $this->t('Style name'); + $header['description'] = $this->t('Description'); return $header + parent::buildHeader(); } @@ -26,6 +27,7 @@ public function buildHeader() { */ public function buildRow(EntityInterface $entity) { $row['label'] = $entity->label(); + $row['description']['data'] = ['#markup' => $entity->getDescription()]; return $row + parent::buildRow($entity); } diff --git a/core/modules/image/tests/src/Functional/ImageAdminStylesTest.php b/core/modules/image/tests/src/Functional/ImageAdminStylesTest.php index 51a3631cbb..293d88bd26 100644 --- a/core/modules/image/tests/src/Functional/ImageAdminStylesTest.php +++ b/core/modules/image/tests/src/Functional/ImageAdminStylesTest.php @@ -117,9 +117,11 @@ public function testStyle() { $edit = [ 'name' => $style_name, 'label' => $style_label, + 'description' => 'This is sample description text.', ]; $this->drupalPostForm($admin_path . '/add', $edit, 'Create new style'); $this->assertRaw(t('Style %name was created.', ['%name' => $style_label])); + $this->assertSession()->responseContains('This is sample description text.'); // Ensure that the expected entity operations are there. $this->drupalGet($admin_path); @@ -346,6 +348,7 @@ public function testStyleReplacement() { $edit = [ 'name' => $new_style_name, 'label' => $new_style_label, + 'description' => $this->randomString(), ]; $this->drupalPostForm($style_path . $style_name, $edit, 'Save'); $this->assertText('Changes to the style have been saved.'); diff --git a/core/modules/image/tests/src/Functional/Rest/ImageStyleResourceTestBase.php b/core/modules/image/tests/src/Functional/Rest/ImageStyleResourceTestBase.php index 57cfcd9a4b..5c21eb1bc1 100644 --- a/core/modules/image/tests/src/Functional/Rest/ImageStyleResourceTestBase.php +++ b/core/modules/image/tests/src/Functional/Rest/ImageStyleResourceTestBase.php @@ -49,6 +49,7 @@ protected function createEntity() { $camelids = ImageStyle::create([ 'name' => 'camelids', 'label' => 'Camelids', + 'description' => 'Camelids', ]); // Add an image effect. @@ -89,6 +90,7 @@ protected function getExpectedNormalizedEntity() { 'label' => 'Camelids', 'langcode' => 'en', 'name' => 'camelids', + 'description' => 'Camelids', 'status' => TRUE, 'uuid' => $this->entity->uuid(), ]; diff --git a/core/modules/jsonapi/tests/src/Functional/ImageStyleTest.php b/core/modules/jsonapi/tests/src/Functional/ImageStyleTest.php index bce1a2fef9..a4db957024 100644 --- a/core/modules/jsonapi/tests/src/Functional/ImageStyleTest.php +++ b/core/modules/jsonapi/tests/src/Functional/ImageStyleTest.php @@ -61,6 +61,7 @@ protected function createEntity() { $camelids = ImageStyle::create([ 'name' => 'camelids', 'label' => 'Camelids', + 'description' => 'Camelids', ]); // Add an image effect. @@ -117,6 +118,7 @@ protected function getExpectedDocument() { ], ], 'label' => 'Camelids', + 'description' => 'Camelids', 'langcode' => 'en', 'status' => TRUE, 'drupal_internal__name' => 'camelids', diff --git a/core/modules/media_library/config/install/image.style.media_library.yml b/core/modules/media_library/config/install/image.style.media_library.yml index f1acd3b6c9..b1848f443c 100644 --- a/core/modules/media_library/config/install/image.style.media_library.yml +++ b/core/modules/media_library/config/install/image.style.media_library.yml @@ -6,6 +6,7 @@ dependencies: - media_library name: media_library label: 'Media Library thumbnail (220×220)' +description: null effects: 75b076a8-1234-4b42-85db-bf377c4d8d5f: uuid: 75b076a8-1234-4b42-85db-bf377c4d8d5f diff --git a/core/profiles/demo_umami/config/install/image.style.large_21_9.yml b/core/profiles/demo_umami/config/install/image.style.large_21_9.yml index f2be28f7ab..8f2d92e655 100644 --- a/core/profiles/demo_umami/config/install/image.style.large_21_9.yml +++ b/core/profiles/demo_umami/config/install/image.style.large_21_9.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: large_21_9 label: 'Large 21:9 (1440x620)' +description: null effects: 90b69780-6eb1-4cc8-a500-88235ad52f5c: uuid: 90b69780-6eb1-4cc8-a500-88235ad52f5c diff --git a/core/profiles/demo_umami/config/install/image.style.large_21_9_2x.yml b/core/profiles/demo_umami/config/install/image.style.large_21_9_2x.yml index d65f5f5938..60a9e5b7ee 100644 --- a/core/profiles/demo_umami/config/install/image.style.large_21_9_2x.yml +++ b/core/profiles/demo_umami/config/install/image.style.large_21_9_2x.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: large_21_9_2x label: 'Large 21:9 2x (2880x1240)' +description: null effects: 6b96b7e5-aabd-406e-86ec-2c2e2c18bd82: uuid: 6b96b7e5-aabd-406e-86ec-2c2e2c18bd82 diff --git a/core/profiles/demo_umami/config/install/image.style.large_3_2_2x.yml b/core/profiles/demo_umami/config/install/image.style.large_3_2_2x.yml index 709d3c3593..c8c8a275ed 100644 --- a/core/profiles/demo_umami/config/install/image.style.large_3_2_2x.yml +++ b/core/profiles/demo_umami/config/install/image.style.large_3_2_2x.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: large_3_2_2x label: 'Large 3:2 2x (1536x1024)' +description: null effects: f0d332fd-0884-4f29-9f3c-befd244a63b4: uuid: f0d332fd-0884-4f29-9f3c-befd244a63b4 diff --git a/core/profiles/demo_umami/config/install/image.style.large_3_2_768x512.yml b/core/profiles/demo_umami/config/install/image.style.large_3_2_768x512.yml index 9c0273d451..095d1efedc 100644 --- a/core/profiles/demo_umami/config/install/image.style.large_3_2_768x512.yml +++ b/core/profiles/demo_umami/config/install/image.style.large_3_2_768x512.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: large_3_2_768x512 label: 'Large 3:2 (768x512)' +description: null effects: 36c9f14a-8f5e-4794-92ea-bffab074f52e: uuid: 36c9f14a-8f5e-4794-92ea-bffab074f52e diff --git a/core/profiles/demo_umami/config/install/image.style.medium_21_9.yml b/core/profiles/demo_umami/config/install/image.style.medium_21_9.yml index d6b0d6a08c..ea54d9f8b5 100644 --- a/core/profiles/demo_umami/config/install/image.style.medium_21_9.yml +++ b/core/profiles/demo_umami/config/install/image.style.medium_21_9.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: medium_21_9 label: 'Medium 21:9 (1024x440)' +description: null effects: 52985ed4-81d6-4ecf-90c1-4e8c651f76ba: uuid: 52985ed4-81d6-4ecf-90c1-4e8c651f76ba diff --git a/core/profiles/demo_umami/config/install/image.style.medium_3_2_2x.yml b/core/profiles/demo_umami/config/install/image.style.medium_3_2_2x.yml index e617febb44..b4ce2e7bfa 100644 --- a/core/profiles/demo_umami/config/install/image.style.medium_3_2_2x.yml +++ b/core/profiles/demo_umami/config/install/image.style.medium_3_2_2x.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: medium_3_2_2x label: 'Medium 3:2 2x (1200x800)' +description: null effects: 4d5a2dc6-8ec0-4a7e-95bb-dd19e8ed248a: uuid: 4d5a2dc6-8ec0-4a7e-95bb-dd19e8ed248a diff --git a/core/profiles/demo_umami/config/install/image.style.medium_3_2_600x400.yml b/core/profiles/demo_umami/config/install/image.style.medium_3_2_600x400.yml index 8ae09daff0..90cb6944fc 100644 --- a/core/profiles/demo_umami/config/install/image.style.medium_3_2_600x400.yml +++ b/core/profiles/demo_umami/config/install/image.style.medium_3_2_600x400.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: medium_3_2_600x400 label: 'Medium 3:2 (600x400)' +description: null effects: 75efca62-f371-41b7-8c6e-5ce6103e0fe4: uuid: 75efca62-f371-41b7-8c6e-5ce6103e0fe4 diff --git a/core/profiles/demo_umami/config/install/image.style.medium_8_7.yml b/core/profiles/demo_umami/config/install/image.style.medium_8_7.yml index 0283770805..5715e75547 100644 --- a/core/profiles/demo_umami/config/install/image.style.medium_8_7.yml +++ b/core/profiles/demo_umami/config/install/image.style.medium_8_7.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: medium_8_7 label: 'Medium 8:7 (266x236)' +description: null effects: a7d919ee-5a34-476b-b893-c9649a621e60: uuid: a7d919ee-5a34-476b-b893-c9649a621e60 diff --git a/core/profiles/demo_umami/config/install/image.style.scale_crop_7_3_large.yml b/core/profiles/demo_umami/config/install/image.style.scale_crop_7_3_large.yml index 1488edd970..9f6320dad4 100644 --- a/core/profiles/demo_umami/config/install/image.style.scale_crop_7_3_large.yml +++ b/core/profiles/demo_umami/config/install/image.style.scale_crop_7_3_large.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: scale_crop_7_3_large label: 'Scale crop 7:3 large' +description: null effects: 6e4edf30-59c0-45d0-ba6d-63dac5128eef: uuid: 6e4edf30-59c0-45d0-ba6d-63dac5128eef diff --git a/core/profiles/demo_umami/config/install/image.style.small_21_9.yml b/core/profiles/demo_umami/config/install/image.style.small_21_9.yml index 54cddab9f9..622843b1d7 100644 --- a/core/profiles/demo_umami/config/install/image.style.small_21_9.yml +++ b/core/profiles/demo_umami/config/install/image.style.small_21_9.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: small_21_9 label: 'Small 21:9 (768x330)' +description: null effects: 06eaf095-124b-435d-af50-442044e91e7d: uuid: 06eaf095-124b-435d-af50-442044e91e7d diff --git a/core/profiles/demo_umami/config/install/image.style.square_large.yml b/core/profiles/demo_umami/config/install/image.style.square_large.yml index 55081c33ab..34bccfadbc 100644 --- a/core/profiles/demo_umami/config/install/image.style.square_large.yml +++ b/core/profiles/demo_umami/config/install/image.style.square_large.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: square_large label: 'Square Large' +description: null effects: c7627da6-934e-47e2-a795-f10a424bda34: uuid: c7627da6-934e-47e2-a795-f10a424bda34 diff --git a/core/profiles/demo_umami/config/install/image.style.square_medium.yml b/core/profiles/demo_umami/config/install/image.style.square_medium.yml index e920ef9141..f8eec97248 100644 --- a/core/profiles/demo_umami/config/install/image.style.square_medium.yml +++ b/core/profiles/demo_umami/config/install/image.style.square_medium.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: square_medium label: 'Square Medium' +description: null effects: c42becc5-dd14-4384-81e1-8a667c60a705: uuid: c42becc5-dd14-4384-81e1-8a667c60a705 diff --git a/core/profiles/demo_umami/config/install/image.style.square_small.yml b/core/profiles/demo_umami/config/install/image.style.square_small.yml index 97b37fadff..f22c7f5c0e 100644 --- a/core/profiles/demo_umami/config/install/image.style.square_small.yml +++ b/core/profiles/demo_umami/config/install/image.style.square_small.yml @@ -3,6 +3,7 @@ status: true dependencies: { } name: square_small label: 'Square Small' +description: null effects: 6c19e3f2-f291-4824-bc17-e485a979502c: uuid: 6c19e3f2-f291-4824-bc17-e485a979502c diff --git a/core/profiles/demo_umami/config/optional/image.style.max_1300x1300.yml b/core/profiles/demo_umami/config/optional/image.style.max_1300x1300.yml index 28aad5aada..958f63e780 100644 --- a/core/profiles/demo_umami/config/optional/image.style.max_1300x1300.yml +++ b/core/profiles/demo_umami/config/optional/image.style.max_1300x1300.yml @@ -6,6 +6,7 @@ dependencies: - responsive_image name: max_1300x1300 label: 'Max 1300x1300' +description: null effects: 04caae9a-fa3e-4ea6-ae09-9c26aec7d308: uuid: 04caae9a-fa3e-4ea6-ae09-9c26aec7d308 diff --git a/core/profiles/demo_umami/config/optional/image.style.max_2600x2600.yml b/core/profiles/demo_umami/config/optional/image.style.max_2600x2600.yml index ace3a8a492..c3014b00a2 100644 --- a/core/profiles/demo_umami/config/optional/image.style.max_2600x2600.yml +++ b/core/profiles/demo_umami/config/optional/image.style.max_2600x2600.yml @@ -6,6 +6,7 @@ dependencies: - responsive_image name: max_2600x2600 label: 'Max 2600x2600' +description: null effects: 9b311dd1-0351-45a1-9500-cd069e4670cb: uuid: 9b311dd1-0351-45a1-9500-cd069e4670cb diff --git a/core/profiles/demo_umami/config/optional/image.style.max_325x325.yml b/core/profiles/demo_umami/config/optional/image.style.max_325x325.yml index 6a2289e76a..fbf502999d 100644 --- a/core/profiles/demo_umami/config/optional/image.style.max_325x325.yml +++ b/core/profiles/demo_umami/config/optional/image.style.max_325x325.yml @@ -6,6 +6,7 @@ dependencies: - responsive_image name: max_325x325 label: 'Max 325x325' +description: null effects: cb842cc8-682f-42a6-bd05-5a1ac726f0d8: uuid: cb842cc8-682f-42a6-bd05-5a1ac726f0d8 diff --git a/core/profiles/demo_umami/config/optional/image.style.max_650x650.yml b/core/profiles/demo_umami/config/optional/image.style.max_650x650.yml index 9aa0fb5fc8..16262179f4 100644 --- a/core/profiles/demo_umami/config/optional/image.style.max_650x650.yml +++ b/core/profiles/demo_umami/config/optional/image.style.max_650x650.yml @@ -6,6 +6,7 @@ dependencies: - responsive_image name: max_650x650 label: 'Max 650x650' +description: null effects: 949c201a-77f5-48f6-ba00-be91eb1aad47: uuid: 949c201a-77f5-48f6-ba00-be91eb1aad47 diff --git a/core/profiles/standard/config/optional/image.style.max_1300x1300.yml b/core/profiles/standard/config/optional/image.style.max_1300x1300.yml index 5c9ca1d2a2..1a1c52a8d9 100644 --- a/core/profiles/standard/config/optional/image.style.max_1300x1300.yml +++ b/core/profiles/standard/config/optional/image.style.max_1300x1300.yml @@ -1,5 +1,6 @@ name: max_1300x1300 label: 'Max 1300x1300' +description: null effects: 04caae9a-fa3e-4ea6-ae09-9c26aec7d308: id: image_scale diff --git a/core/profiles/standard/config/optional/image.style.max_2600x2600.yml b/core/profiles/standard/config/optional/image.style.max_2600x2600.yml index cef91d50cc..66629f9c1f 100644 --- a/core/profiles/standard/config/optional/image.style.max_2600x2600.yml +++ b/core/profiles/standard/config/optional/image.style.max_2600x2600.yml @@ -1,5 +1,6 @@ name: max_2600x2600 label: 'Max 2600x2600' +description: null effects: 9b311dd1-0351-45a1-9500-cd069e4670cb: id: image_scale diff --git a/core/profiles/standard/config/optional/image.style.max_325x325.yml b/core/profiles/standard/config/optional/image.style.max_325x325.yml index 30cb39e030..e61f3fb3cc 100644 --- a/core/profiles/standard/config/optional/image.style.max_325x325.yml +++ b/core/profiles/standard/config/optional/image.style.max_325x325.yml @@ -1,5 +1,6 @@ name: max_325x325 label: 'Max 325x325' +description: null effects: cb842cc8-682f-42a6-bd05-5a1ac726f0d8: id: image_scale diff --git a/core/profiles/standard/config/optional/image.style.max_650x650.yml b/core/profiles/standard/config/optional/image.style.max_650x650.yml index 30bd8c44f1..fc45858fa4 100644 --- a/core/profiles/standard/config/optional/image.style.max_650x650.yml +++ b/core/profiles/standard/config/optional/image.style.max_650x650.yml @@ -1,5 +1,6 @@ name: max_650x650 label: 'Max 650x650' +description: null effects: 949c201a-77f5-48f6-ba00-be91eb1aad47: id: image_scale diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php index d63a198aed..f1796d50a2 100644 --- a/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php +++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigSchemaTest.php @@ -188,6 +188,9 @@ public function testSchemaMapping() { $expected['mapping']['name']['type'] = 'string'; $expected['mapping']['label']['type'] = 'label'; $expected['mapping']['label']['label'] = 'Label'; + $expected['mapping']['description']['type'] = 'text'; + $expected['mapping']['description']['label'] = 'Description'; + $expected['mapping']['description']['nullable'] = true; $expected['mapping']['effects']['type'] = 'sequence'; $expected['mapping']['effects']['sequence']['type'] = 'mapping'; $expected['mapping']['effects']['sequence']['mapping']['id']['type'] = 'string';