--- /dev/null
+<?php
+
+namespace Drupal\entity_reference_revisions\Plugin\diff\Field;
+
+use Drupal\diff\FieldDiffBuilderBase;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\diff\FieldReferenceInterface;
+
+/**
+ * This plugins offers the possibility to compare ERR fields.
+ *
+ * @FieldDiffBuilder(
+ * id = "entity_reference_revisions_field_diff_builder",
+ * label = @Translation("Field Diff for Paragraphs"),
+ * field_types = {
+ * "entity_reference_revisions"
+ * },
+ * )
+ */
+class EntityReferenceRevisionsFieldDiffBuilder extends FieldDiffBuilderBase implements FieldReferenceInterface {
+
+ /**
+ * {@inheritdoc}
+ */
+ public function build(FieldItemListInterface $field_items) {
+ $result_text = array();
+ $item_counter = 0;
+ /** @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $field_item */
+ foreach ($field_items as $field_key => $field_item) {
+ if (!$field_item->isEmpty() && $field_item->entity) {
+ $parsed_text = $this->entityParser->parseEntity($field_item->entity);
+ if (is_array($parsed_text)) {
+ foreach ($parsed_text as $field_id => $field) {
+ foreach ($field as $id => $text) {
+ $result_text[$item_counter + $id] = $text;
+ }
+ $item_counter = $item_counter + $id + 1;
+ }
+ }
+ }
+ }
+ return $result_text;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getEntitiesToDiff(FieldItemListInterface $field_items) {
+ /** @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $field_item */
+ $entities = [];
+ foreach ($field_items as $field_key => $field_item) {
+ if (!$field_item->isEmpty() && $field_item->entity) {
+ $entities[$field_key] = $field_item->entity;
+ }
+ }
+ return $entities;
+ }
+
+}