Yaffs site version 1.1
[yaffs-website] / web / modules / contrib / image_widget_crop / src / Element / ImageCrop.php
index a83ec0defb90300a5d28ba8c8f71061afcf19f2a..66155195b6d63d46a6f66471e3a88155590eaf21 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Drupal\image_widget_crop\Element;
 
+use Drupal\Component\Serialization\Json;
 use Drupal\Core\Render\Element\FormElement;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
@@ -58,8 +59,6 @@ class ImageCrop extends FormElement {
     /** @var \Drupal\file\Entity\File $file */
     $file = $element['#file'];
     if (!empty($file) && preg_match('/image/', $file->getMimeType())) {
-      $element['#attached']['drupalSettings']['crop_default'] = $element['#show_default_crop'];
-
       /** @var \Drupal\Core\Image\Image $image */
       $image = \Drupal::service('image.factory')->get($file->getFileUri());
       if (!$image->isValid()) {
@@ -80,7 +79,7 @@ class ImageCrop extends FormElement {
       $crop_type_list = $element['#crop_type_list'];
       // Display all crop types if none is selected.
       if (empty($crop_type_list)) {
-        /** @var \Drupal\image_widget_crop\ImageWidgetCropManager $image_widget_crop_manager */
+        /** @var \Drupal\image_widget_crop\ImageWidgetCropInterface $image_widget_crop_manager */
         $image_widget_crop_manager = \Drupal::service('image_widget_crop.manager');
         $available_crop_types = $image_widget_crop_manager->getAvailableCropType(CropType::getCropTypeNames());
         $crop_type_list = array_keys($available_crop_types);
@@ -88,7 +87,10 @@ class ImageCrop extends FormElement {
       $element['crop_wrapper'] = [
         '#type' => 'details',
         '#title' => t('Crop image'),
-        '#attributes' => ['class' => ['image-data__crop-wrapper']],
+        '#attributes' => [
+          'class' => ['image-data__crop-wrapper'],
+          'data-drupal-iwc' => 'wrapper',
+        ],
         '#open' => $element['#show_crop_area'],
         '#weight' => 100,
       ];
@@ -113,72 +115,73 @@ class ImageCrop extends FormElement {
 
       $element['crop_wrapper'][$list_id] = [
         '#type' => 'vertical_tabs',
-        '#theme_wrappers' => ['vertical_tabs'],
         '#parents' => [$list_id],
       ];
 
       /** @var \Drupal\Core\Config\Entity\ConfigEntityStorage $crop_type_storage */
       $crop_type_storage = \Drupal::entityTypeManager()->getStorage('crop_type');
-      if (!empty($crop_type_storage->loadMultiple())) {
-        foreach ($crop_type_list as $crop_type) {
-          /** @var \Drupal\crop\Entity\CropType $crop_type */
-          $crop_type = $crop_type_storage->load($crop_type);
-          $ratio = $crop_type->getAspectRatio() ? $crop_type->getAspectRatio() : 'Nan';
-
-          $element['#attached']['drupalSettings']['image_widget_crop'][$crop_type->id()] = [
-            'soft_limit' => $crop_type->getSoftLimit(),
-            'hard_limit' => $crop_type->getHardLimit(),
-          ];
 
-          $element['crop_wrapper'][$crop_type->id()] = [
+      /** @var \Drupal\crop\Entity\CropType[] $crop_types */
+      if ($crop_types = $crop_type_storage->loadMultiple($crop_type_list)) {
+        foreach ($crop_types as $type => $crop_type) {
+          $ratio = $crop_type->getAspectRatio() ?: 'NaN';
+
+          $element['crop_wrapper'][$type] = [
             '#type' => 'details',
             '#title' => $crop_type->label(),
             '#group' => $list_id,
+            '#attributes' => [
+              'data-drupal-iwc' => 'type',
+              'data-drupal-iwc-id' => $type,
+              'data-drupal-iwc-ratio' => $ratio,
+              'data-drupal-iwc-show-default-crop' => $element['#show_default_crop'] ? 'true' : 'false',
+              'data-drupal-iwc-soft-limit' => Json::encode($crop_type->getSoftLimit()),
+              'data-drupal-iwc-hard-limit' => Json::encode($crop_type->getHardLimit()),
+              'data-drupal-iwc-original-width' => ($file instanceof FileEntity) ? $file->getMetadata('width') : getimagesize($file->getFileUri())[0],
+              'data-drupal-iwc-original-height' => ($file instanceof FileEntity) ? $file->getMetadata('height') : getimagesize($file->getFileUri())[1],
+            ],
           ];
 
           // Generation of html List with image & crop information.
-          $element['crop_wrapper'][$crop_type->id()]['crop_container'] = [
+          $element['crop_wrapper'][$type]['crop_container'] = [
+            '#id' => $type,
             '#type' => 'container',
-            '#attributes' => [
-              'class' => ['crop-preview-wrapper', $list_id],
-              'id' => [$crop_type->id()],
-              'data-ratio' => [$ratio],
-            ],
+            '#attributes' => ['class' => ['crop-preview-wrapper', $list_id]],
             '#weight' => -10,
           ];
 
-          $element['crop_wrapper'][$crop_type->id()]['crop_container']['image'] = [
+          $element['crop_wrapper'][$type]['crop_container']['image'] = [
             '#theme' => 'image_style',
             '#style_name' => $element['#crop_preview_image_style'],
             '#attributes' => [
               'class' => ['crop-preview-wrapper__preview-image'],
-              'data-ratio' => $ratio,
-              'data-name' => $crop_type->id(),
-              'data-original-width' => ($file instanceof FileEntity) ? $file->getMetadata('width') : getimagesize($file->getFileUri())[0],
-              'data-original-height' => ($file instanceof FileEntity) ? $file->getMetadata('height') : getimagesize($file->getFileUri())[1],
+              'data-drupal-iwc' => 'image',
             ],
             '#uri' => $file->getFileUri(),
             '#weight' => -10,
           ];
 
-          $element['crop_wrapper'][$crop_type->id()]['crop_container']['reset'] = [
+          $element['crop_wrapper'][$type]['crop_container']['reset'] = [
             '#type' => 'button',
             '#value' => t('Reset crop'),
-            '#attributes' => ['class' => ['crop-preview-wrapper__crop-reset']],
+            '#attributes' => [
+              'class' => ['crop-preview-wrapper__crop-reset'],
+              'data-drupal-iwc' => 'reset',
+            ],
             '#weight' => -10,
           ];
 
           // Generation of html List with image & crop information.
-          $element['crop_wrapper'][$crop_type->id()]['crop_container']['values'] = [
+          $element['crop_wrapper'][$type]['crop_container']['values'] = [
             '#type' => 'container',
             '#attributes' => ['class' => ['crop-preview-wrapper__value']],
             '#weight' => -9,
           ];
 
           // Element to track whether cropping is applied or not.
-          $element['crop_wrapper'][$crop_type->id()]['crop_container']['values']['crop_applied'] = [
+          $element['crop_wrapper'][$type]['crop_container']['values']['crop_applied'] = [
             '#type' => 'hidden',
-            '#attributes' => ['class' => ["crop-applied"]],
+            '#attributes' => ['data-drupal-iwc-value' => 'applied'],
             '#default_value' => 0,
           ];
           $edit = FALSE;
@@ -186,20 +189,20 @@ class ImageCrop extends FormElement {
           $form_state_element_values = $form_state->getValue($element['#parents']);
           // Check if form state has values.
           if ($form_state_element_values) {
-            $form_state_properties = $form_state_element_values['crop_wrapper'][$crop_type->id()]['crop_container']['values'];
+            $form_state_properties = $form_state_element_values['crop_wrapper'][$type]['crop_container']['values'];
             // If crop is applied by the form state we keep it that way.
             if ($form_state_properties['crop_applied'] == '1') {
-              $element['crop_wrapper'][$crop_type->id()]['crop_container']['values']['crop_applied']['#default_value'] = 1;
+              $element['crop_wrapper'][$type]['crop_container']['values']['crop_applied']['#default_value'] = 1;
               $edit = TRUE;
             }
             $properties = $form_state_properties;
           }
 
-          /** @var \Drupal\crop\Entity\Crop $crop */
-          $crop = Crop::findCrop($file->getFileUri(), $crop_type->id());
+          /** @var \Drupal\crop\CropInterface $crop */
+          $crop = Crop::findCrop($file->getFileUri(), $type);
           if ($crop) {
             $edit = TRUE;
-            /** @var \Drupal\image_widget_crop\ImageWidgetCropManager $image_widget_crop_manager */
+            /** @var \Drupal\image_widget_crop\ImageWidgetCropInterface $image_widget_crop_manager */
             $image_widget_crop_manager = \Drupal::service('image_widget_crop.manager');
             $original_properties = $image_widget_crop_manager->getCropProperties($crop);
 
@@ -207,14 +210,14 @@ class ImageCrop extends FormElement {
             // form state has no values yet and there are saved values then we
             // use the saved values.
             $properties = $original_properties == $properties || empty($properties) ? $original_properties : $properties;
-            $element['crop_wrapper'][$crop_type->id()]['crop_container']['values']['crop_applied']['#default_value'] = 1;
+            $element['crop_wrapper'][$type]['crop_container']['values']['crop_applied']['#default_value'] = 1;
             // If the user edits an entity and while adding new images resets an
             // saved crop we keep it reset.
             if (isset($properties['crop_applied']) && $properties['crop_applied'] == '0') {
-              $element['crop_wrapper'][$crop_type->id()]['crop_container']['values']['crop_applied']['#default_value'] = 0;
+              $element['crop_wrapper'][$type]['crop_container']['values']['crop_applied']['#default_value'] = 0;
             }
           }
-          self::getCropFormElement($element, 'crop_container', $properties, $edit, $crop_type->id());
+          self::getCropFormElement($element, 'crop_container', $properties, $edit, $type);
         }
         // Stock Original File Values.
         $element['file-uri'] = [
@@ -275,9 +278,7 @@ class ImageCrop extends FormElement {
       $value_property = self::getCropFormPropertyValue($element, $crop_type_id, $edit, $value['value'], $property);
       $crop_element = [
         '#type' => 'hidden',
-        '#attributes' => [
-          'class' => ["crop-$property"],
-        ],
+        '#attributes' => ['data-drupal-iwc-value' => $property],
         '#crop_type' => $crop_type_id,
         '#element_name' => $property,
         '#default_value' => $value_property,