diff --git a/src/Plugin/Field/FieldFormatter/SmartTrimFormatter.php b/src/Plugin/Field/FieldFormatter/SmartTrimFormatter.php index 616a5e6..969aa41 100644 --- a/src/Plugin/Field/FieldFormatter/SmartTrimFormatter.php +++ b/src/Plugin/Field/FieldFormatter/SmartTrimFormatter.php @@ -49,6 +49,7 @@ class SmartTrimFormatter extends FormatterBase { 'more_aria_label' => 'Read more about [node:title]', 'summary_handler' => 'full', 'trim_options' => [], + 'trim_preserve_tags' => '', ] + parent::defaultSettings(); } @@ -185,6 +186,18 @@ class SmartTrimFormatter extends FormatterBase { '#default_value' => empty($trim_options_value) ? [] : array_keys(array_filter($trim_options_value)), ]; + $element['trim_preserve_tags'] = [ + '#type' => 'textfield', + '#title' => $this->t('Tags to preserve'), + '#description' => $this->t('Which tags to preserve if "Strip HTML" is chosen above. Format as "<p><a>" to preserve p and a tags.'), + '#default_value' => $this->getSetting('trim_preserve_tags'), + '#states' => [ + 'visible' => [ + ':input[name="fields[body][settings_edit_form][settings][trim_options][text]"]' => ['checked' => TRUE], + ], + ], + ]; + return $element; } @@ -218,6 +231,7 @@ class SmartTrimFormatter extends FormatterBase { $element = []; $setting_trim_options = $this->getSetting('trim_options'); $settings_summary_handler = $this->getSetting('summary_handler'); + $setting_trim_preserve_tags = $this->getSetting('trim_preserve_tags'); $entity = $items->getEntity(); foreach ($items as $delta => $item) { @@ -252,7 +266,7 @@ class SmartTrimFormatter extends FormatterBase { $output = preg_replace('/]*>.*?<\/style>/is', ' ', $output); // Strip tags. - $output = strip_tags($output); + $output = strip_tags($output, $setting_trim_preserve_tags); // Strip out line breaks. $output = preg_replace('/\n|\r|\t/m', ' ', $output);