formatter = $formatter; $this->manager = $manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container->get('slick.formatter'), $container->get('slick.manager') ); } /** * {@inheritdoc} */ public static function defaultSettings() { return SlickDefault::baseSettings(); } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { // Early opt-out if the field is empty. if ($items->isEmpty()) { return []; } $settings = $this->getSettings(); $settings['vanilla'] = TRUE; // Build the settings. $build = ['settings' => $settings]; $this->formatter->buildSettings($build, $items); // The ProcessedText element already handles cache context & tag bubbling. // @see \Drupal\filter\Element\ProcessedText::preRenderText() foreach ($items as $key => $item) { $element = [ '#type' => 'processed_text', '#text' => $item->value, '#format' => $item->format, '#langcode' => $item->getLangcode(), ]; $build['items'][$key] = $element; unset($element); } return $this->manager()->build($build); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $element = []; $definition = $this->getScopedFormElements(); $this->admin()->buildSettingsForm($element, $definition); return $element; } /** * Defines the scope for the form elements. */ public function getScopedFormElements() { return [ 'current_view_mode' => $this->viewMode, 'no_layouts' => TRUE, 'plugin_id' => $this->getPluginId(), 'settings' => $this->getSettings(), ]; } }