/** * {@inheritdoc} */ public static function process($element, FormStateInterface $form_state, $form) { $item = $element['#value']; $element['slide_text'] = array('#type' => 'textarea', '#title' => t('Slide Text'), '#default_value' => isset($element['#default_value']['slide_text']) ? $element['#default_value']['slide_text'] : '', '#maxlength' => 1024, '#weight' => -2); $element = parent::process($element, $form_state, $form); return $element; }
/** * {@inheritDocs} * * Form API callback: Processes a image_fp field element. * * Expands the image_fp type to include the focal_point field. * * This method is assigned as a #process callback in formElement() method. */ public static function process($element, FormStateInterface $form_state, $form) { $element = parent::process($element, $form_state, $form); $item = $element['#value']; $item['fids'] = $element['fids']['#value']; // Add the focal point indicator to preview. if (isset($element['preview'])) { $preview = array('indicator' => array('#theme_wrappers' => array('container'), '#attributes' => array('class' => array('focal-point-indicator'), 'data-field-name' => $element['#field_name'], 'data-delta' => $element['#delta']), '#markup' => ''), 'thumbnail' => $element['preview']); // Use the existing preview weight value so that the focal point indicator // and thumbnail appear in the correct order. $preview['#weight'] = isset($element['preview']['#weight']) ? $element['preview']['#weight'] : 0; unset($preview['thumbnail']['#weight']); $element['preview'] = $preview; } // Add the focal point field. $element['focal_point'] = array('#type' => 'textfield', '#title' => 'Focal point', '#description' => t('Specify the focus of this image in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75'), '#default_value' => isset($item['focal_point']) ? $item['focal_point'] : FocalPoint::DEFAULT_VALUE, '#element_validate' => array('\\Drupal\\focal_point\\Plugin\\Field\\FieldWidget\\FocalPointImageWidget::validateFocalPoint'), '#attributes' => array('class' => array('focal-point', 'focal-point-' . $element['#field_name'] . '-' . $element['#delta']), 'data-delta' => $element['#delta'], 'data-field-name' => $element['#field_name']), '#attached' => array('library' => array('focal_point/drupal.focal_point'))); return $element; }
/** * {@inheritdoc} * * Form API callback: Processes an image_fp field element. * * Expands the image_fp type to include the focal_point field. * * This method is assigned as a #process callback in formElement() method. */ public static function process($element, FormStateInterface $form_state, $form) { $element = parent::process($element, $form_state, $form); $item = $element['#value']; $item['fids'] = $element['fids']['#value']; $element_selector = 'focal-point-' . implode('-', $element['#parents']); $default_focal_point_value = isset($item['focal_point']) ? $item['focal_point'] : \Drupal::config('focal_point.settings')->get('default_value'); // Add the focal point indicator to preview. if (isset($element['preview'])) { $indicator = array( '#theme_wrappers' => array('container'), '#attributes' => array( 'class' => array('focal-point-indicator'), 'data-selector' => $element_selector, 'data-delta' => $element['#delta'], ), '#markup' => '', ); $preview = array( 'indicator' => $indicator, 'thumbnail' => $element['preview'], ); $display_preview_link = \Drupal::config('focal_point.preview')->get('display_link'); // Even for image fields with a cardinality higher than 1 the correct fid // can always be found in $item['fids'][0]. $fid = isset($item['fids'][0]) ? $item['fids'][0] : ''; if ($display_preview_link && !empty($fid)) { // Replace comma (,) with an x to make javascript handling easier. $preview_focal_point_value = str_replace(',', 'x', $default_focal_point_value); // Create a token to be used during an access check on the preview page. $token = self::getPreviewToken(); $preview_link = [ '#type' => 'link', '#title' => t('Preview'), '#url' => new Url('focal_point.preview', [ 'fid' => $fid, 'focal_point_value' => $preview_focal_point_value, ], [ 'query' => array('focal_point_token' => $token), ]), '#attributes' => [ 'class' => array('focal-point-preview-link'), 'data-selector' => $element_selector, 'data-field-name' => $element['#field_name'], 'target' => '_blank', ], ]; $preview['preview_link'] = $preview_link; } // Use the existing preview weight value so that the focal point indicator // and thumbnail appear in the correct order. $preview['#weight'] = isset($element['preview']['#weight']) ? $element['preview']['#weight'] : 0; unset($preview['thumbnail']['#weight']); $element['preview'] = $preview; } // Add the focal point field. $element_selector = 'focal-point-' . implode('-', $element['#parents']); $element['focal_point'] = array( '#type' => 'textfield', '#title' => 'Focal point', '#description' => new TranslatableMarkup('Specify the focus of this image in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75'), '#default_value' => $default_focal_point_value, '#element_validate' => array('\Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget::validateFocalPoint'), '#attributes' => array( 'class' => array('focal-point', $element_selector), 'data-selector' => $element_selector, 'data-field-name' => $element['#field_name'], ), '#attached' => array( 'library' => array('focal_point/drupal.focal_point'), ), ); return $element; }
/** * Form API callback: Processes a image_image field element. * * Expands the image_image type to include the alt and title fields. * * This method is assigned as a #process callback in formElement() method. */ public static function process($element, FormStateInterface $form_state, $form) { $element = parent::process($element, $form_state, $form); $item = $element['#value']; $item['fids'] = $element['fids']['#value']; $element['#theme'] = 'imagefield_crop_widget'; $element['#attached']['library'][] = 'imagefield_crop/core'; $cropbox_id = Html::getUniqueId('cropbox-image'); $element['#id'] = $cropbox_id; // Add the image preview. if (!empty($element['#files']) && $element['#preview_image_style']) { $element['#description'] = t('Click on the image and drag to mark how the image will be cropped'); $file = reset($element['#files']); $variables = array('style_name' => $element['#preview_image_style'], 'uri' => $file->getFileUri()); // Determine image dimensions. if (isset($element['#value']['width']) && isset($element['#value']['height'])) { $variables['width'] = $element['#value']['width']; $variables['height'] = $element['#value']['height']; } else { $image = \Drupal::service('image.factory')->get($file->getFileUri()); if ($image->isValid()) { $variables['width'] = $image->getWidth(); $variables['height'] = $image->getHeight(); } else { $variables['width'] = $variables['height'] = NULL; } } if ($element['#imagefield_crop_show_preview']) { $element['preview']['#theme'] = 'imagefield_crop_preview'; } else { $element['preview']['#access'] = FALSE; } $element['cropbox'] = array('#theme' => 'image', '#uri' => $file->getFileUri(), '#attributes' => array('class' => 'cropbox', 'id' => $cropbox_id . '-cropbox'), '#description' => t('Click on the image and drag to mark how the image will be cropped.')); $element['cropinfo'] = self::addCropInfoFields($file->get('fid')->getString()); list($res_w, $res_h) = explode('x', $element['#imagefield_crop_resolution']); list($crop_w, $crop_h) = explode('x', $element['#imagefield_crop_croparea']); $settings = array($cropbox_id => array('box' => array('ratio' => $res_h ? $element['#imagefield_crop_enforce_ratio'] * $res_w / $res_h : 0, 'box_width' => $crop_w, 'box_height' => $crop_h), 'minimum' => array('width' => $element['#imagefield_crop_enforce_minimum'] ? $res_w : NULL, 'height' => $element['#imagefield_crop_enforce_minimum'] ? $res_h : NULL), 'preview' => $element['#imagefield_crop_show_preview'], 'preview_info' => array('orig_width' => $variables['width'], 'orig_height' => $variables['height'], 'width' => (int) $res_w, 'height' => (int) $res_h))); $element['#attached']['drupalSettings']['imagefield_crop'] = $settings; } return $element; }
/** * Form API callback: Processes a crop_image field element. * * Expands the image_image type to include the alt and title fields. * * This method is assigned as a #process callback in formElement() method. */ public static function process($element, FormStateInterface $form_state, $form) { $item = $element['#value']; $item['fids'] = $element['fids']['#value']; $edit = FALSE; $route_params = \Drupal::requestStack()->getCurrentRequest()->attributes->get('_route_params'); if (isset($route_params['_entity_form']) && preg_match('/.edit/', $route_params['_entity_form'])) { $edit = TRUE; } $element['#theme'] = 'image_widget'; $element['#attached']['library'][] = 'image/form'; $element['#attached']['library'][] = 'image_widget_crop/drupal.image_widget_crop.admin'; $element['#attached']['library'][] = 'image_widget_crop/drupal.image_widget_crop.upload.admin'; // Add the image preview. if (!empty($element['#files']) && $element['#preview_image_style']) { $file = reset($element['#files']); $variables = array('style_name' => $element['#preview_image_style'], 'uri' => $file->getFileUri(), 'file_id' => $file->id()); /** @var \Drupal\image_widget_crop\ImageWidgetCrop $ImageWidgetCrop */ $ImageWidgetCrop = new ImageWidgetCrop(); // Determine image dimensions. if (isset($element['#value']['width']) && isset($element['#value']['height'])) { $variables['width'] = $element['#value']['width']; $variables['height'] = $element['#value']['height']; } else { $image = \Drupal::service('image.factory')->get($file->getFileUri()); if ($image->isValid()) { $variables['width'] = $image->getWidth(); $variables['height'] = $image->getHeight(); } else { $variables['width'] = $variables['height'] = NULL; } } $element['crop_preview_wrapper'] = ['#type' => 'container', '#prefix' => '<ul>', '#suffix' => '</ul>', '#attributes' => ['class' => ['preview-wrapper-crop']], '#weight' => 100]; $image_styles = \Drupal::service('entity.manager')->getStorage('image_style')->loadByProperties(['status' => TRUE]); if ($image_styles) { /** @var \Drupal\image\Entity\ImageStyle $image_style */ foreach ($image_styles as $image_style) { if (in_array($image_style->getName(), $element['#crop_list'])) { // Get the ratio of image by ImageStyle. $ratio = $ImageWidgetCrop->getSizeRatio($image_style); // Generation of html List with image & crop informations. // @todo Create new elements for styling the crop container & lists. $element['crop_preview_wrapper'][$image_style->getName()] = ['#type' => 'container', '#prefix' => "<li data-ratio={$ratio}>", '#suffix' => '</li>', '#attributes' => ['class' => ['crop-preview-wrapper-list']], '#weight' => -10]; $element['crop_preview_wrapper'][$image_style->getName()]['title'] = ['#prefix' => '<p>', '#suffix' => '</p>', '#markup' => t('@style_label - ( <b>real ratio</b> @ratio )', ['@style_label' => $image_style->label(), '@ratio' => $ratio])]; $element['crop_preview_wrapper'][$image_style->getName()]['image'] = ['#theme' => 'image_style', '#style_name' => $element['#crop_preview_image_style'], '#uri' => $variables['uri']]; // GET CROP LIBRARIE VALUES. $crop_elements = ['x1' => ['label' => t('crop x1'), 'value' => NULL], 'x2' => ['label' => t('crop x2'), 'value' => NULL], 'y1' => ['label' => t('crop y1'), 'value' => NULL], 'y2' => ['label' => t('crop y2'), 'value' => NULL], 'crop-w' => ['label' => t('crop size width'), 'value' => NULL], 'crop-h' => ['label' => t('crop size height'), 'value' => NULL], 'thumb-w' => ['label' => t('Thumbnail Width'), 'value' => NULL], 'thumb-h' => ['label' => t('Thumbnail Height'), 'value' => NULL]]; if ($edit) { $crop = \Drupal::service('entity.manager')->getStorage('crop')->loadByProperties(['type' => $ImageWidgetCrop->getCropType($image_style), 'uri' => $variables['uri'], 'image_style' => $image_style->getName()]); // Only if the crop already exist pre-populate, // all cordinates values. if (!empty($crop)) { /** @var \Drupal\crop\Entity\Crop $crop_entity */ foreach ($crop as $crop_id => $crop_entity) { $crop_properties = ['anchor' => $crop_entity->position(), 'size' => $crop_entity->size()]; } // If the current crop have a position & sizes, // calculate properties to apply crop selection into preview. if (isset($crop_properties)) { $values = static::getThumbnailCropProperties($variables['uri'], $crop_properties); } if (!empty($values)) { // Populate form crop value with values store into crop API. foreach ($crop_elements as $properties => $value) { $crop_elements[$properties]['value'] = $values[$properties]; } } } } // Generate all cordinates elements into the form when, // process is active. foreach ($crop_elements as $crop_elements_name => $crop_elements_value) { $element['crop_preview_wrapper'][$image_style->getName()][$crop_elements_name] = ['#type' => 'textfield', '#title' => $crop_elements_value['label'], '#attributes' => ['class' => ["crop-{$crop_elements_name}"]], '#default_value' => !empty($edit) ? $crop_elements_value['value'] : NULL]; } // Stock Original File Values. $element['file-uri'] = ['#type' => 'value', '#value' => $variables['uri']]; $element['file-id'] = ['#type' => 'value', '#value' => $variables['file_id']]; } } } } return parent::process($element, $form_state, $form); }