.../src/Plugin/DataType/ComputedImageStyle.php | 20 ++++++++++++++++-- .../src/Plugin/DataType/ComputedImageStyleList.php | 9 ++++++++ .../Plugin/DataType/ImageStyleDataDefinition.php | 24 ++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/core/modules/image/src/Plugin/DataType/ComputedImageStyle.php b/core/modules/image/src/Plugin/DataType/ComputedImageStyle.php index 8caacd5..0bb862c 100644 --- a/core/modules/image/src/Plugin/DataType/ComputedImageStyle.php +++ b/core/modules/image/src/Plugin/DataType/ComputedImageStyle.php @@ -2,7 +2,9 @@ namespace Drupal\image\Plugin\DataType; -use Drupal\Core\TypedData\TypedData; +use Drupal\Core\TypedData\DataDefinition; +use Drupal\Core\TypedData\MapDataDefinition; +use Drupal\Core\TypedData\Plugin\DataType\Map; /** * The image style data type. @@ -12,6 +14,7 @@ * @DataType( * id = "image_style", * label = @Translation("Image style metadata"), + * definition_class = "\Drupal\image\Plugin\DataType\ImageStyleDataDefinition", * list_class = "\Drupal\image\Plugin\DataType\ComputedImageStyleList", * ) * @@ -19,7 +22,7 @@ * * @internal */ -class ComputedImageStyle extends TypedData { +class ComputedImageStyle extends Map { protected $url = NULL; protected $width = NULL; @@ -28,6 +31,19 @@ class ComputedImageStyle extends TypedData { /** * {@inheritdoc} * + * @todo ensure this is actually used, and make typed data stuff actually work. Should it be this or should it be \Drupal\image\Plugin\DataType\ImageStyleDataDefinition? I can't figure it out. + */ + public function getDataDefinition() { + return MapDataDefinition::create() + ->setPropertyDefinition('url', DataDefinition::create('uri')) + ->setPropertyDefinition('width', DataDefinition::create('int')) + ->setPropertyDefinition('height', DataDefinition::create('int')); + } + + + /** + * {@inheritdoc} + * * @todo receive a value object that implements CacheableDependencyInterface */ public function setValue($value, $notify = TRUE) { diff --git a/core/modules/image/src/Plugin/DataType/ComputedImageStyleList.php b/core/modules/image/src/Plugin/DataType/ComputedImageStyleList.php index 6343ca2..513af43 100644 --- a/core/modules/image/src/Plugin/DataType/ComputedImageStyleList.php +++ b/core/modules/image/src/Plugin/DataType/ComputedImageStyleList.php @@ -32,6 +32,15 @@ protected function computedListProperty() { } /** + * {@inheritdoc} + */ + protected function createItem($offset = 0, $value = NULL) { + // @todo perhaps some override like \Drupal\Core\Field\FieldItemList::createItem()? + return parent::createItem($offset, $value); + } + + + /** * @param \Drupal\file\FileInterface $file * @param $width * @param $height diff --git a/core/modules/image/src/Plugin/DataType/ImageStyleDataDefinition.php b/core/modules/image/src/Plugin/DataType/ImageStyleDataDefinition.php new file mode 100644 index 0000000..b48f5ce --- /dev/null +++ b/core/modules/image/src/Plugin/DataType/ImageStyleDataDefinition.php @@ -0,0 +1,24 @@ + DataDefinition::create('uri'), + 'width' => DataDefinition::create('int'), + 'height' => DataDefinition::create('int'), + ]; + } + +}