80, 'link_text' => '', 'event_modifiers' => NULL, 'methode' => '', ] + parent::defaultSettings(); } public function settingsForm(array $parentForm, FormStateInterface $form_state) { $parentForm = parent::settingsForm($parentForm, $form_state); $settings = $this->getSettings(); $form['link_text'] = [ '#type' => 'textfield', '#title' => $this->t('Link text, leave empty for default'), '#default_value' => $settings['link_text'], ]; $form['methode'] = [ '#type' => 'textfield', '#title' => $this->t('Vue methode for @click vue-attribute.'), '#default_value' => $settings['methode'], '#required' => TRUE, ]; $form['event_modifiers'] = [ '#type' => 'checkboxes', '#title' => $this->t('Event modifiers'), '#default_value' => $settings['event_modifiers'], // '#empty_option' => $this->t('None'), '#options' => [ 'prevent' => $this->t('.prevent'), 'stop' => $this->t('.stop'), 'capture' => $this->t('.capture'), 'self' => $this->t('.self'), 'once' => $this->t('.once'), 'passive' => $this->t('.passive'), ], ]; return $form + $parentForm; } public function settingsSummary() { $settings = $this->getSettings(); $summary = []; if (!empty($settings['link_text'])) { $summary[] = $this->t('Link text: @text"', ['@text' => $settings['link_text']]); } if (!empty($settings['methode'])) { $summary[] = $this->t('Click Methode: @text', ['@text' => $settings['methode']]); } if (!empty($settings['event_modifiers'])) { $summary[] = $this->t('Event modifier: @text', ['@text' => implode('.', $settings['event_modifiers'])]); } // TODO: add key event return $summary; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { $element = array(); $entity = $items->getEntity(); $settings = $this->getSettings(); foreach ($items as $delta => $item) { // By default use the full URL as the link text. $url = $this->buildUrl($item); $link_title = $url->toString(); // If the link text field value is available, use it for the text. if (empty($settings['url_only']) && !empty($item->title)) { // Unsanitized token replacement here because the entire link title // gets auto-escaped during link generation in // \Drupal\Core\Utility\LinkGenerator::generate(). $link_title = \Drupal::token()->replace($item->title, [$entity->getEntityTypeId() => $entity], ['clear' => TRUE]); } if (!empty($settings['link_text'])) { $link_title = $this->t($settings['link_text']); } // The link_separate formatter has two titles; the link text (as in the // field values) and the URL itself. If there is no link text value, // $link_title defaults to the URL, so it needs to be unset. // The URL version may need to be trimmed as well. if (empty($item->title) && empty($settings['link_text'])) { $link_title = NULL; } $url_title = $url->toString(); if (!empty($settings['trim_length'])) { $link_title = Unicode::truncate($link_title, $settings['trim_length'], FALSE, TRUE); $url_title = Unicode::truncate($url_title, $settings['trim_length'], FALSE, TRUE); } $element[$delta] = array( '#theme' => 'link_formatter_vue_link_formatter', '#title' => $link_title, '#url_title' => $url_title, '#url' => $url, '#methode' => $settings['methode'], '#event_modifiers' => $settings['event_modifiers'], ); $attributes = []; if (!empty($item->_attributes)) { // Set our RDFa attributes on the element that is being built. $url->setOption('attributes', $item->_attributes); // Unset field item attributes since they have been included in the // formatter output and should not be rendered in the field template. unset($item->_attributes); } } return $element; } }