public function EditorButtonLinkFilter::process in Editor Button Link 8
Performs the filter processing.
Parameters
string $text: The text string to be filtered.
string $langcode: The language code of the text to be filtered.
Return value
\Drupal\filter\FilterProcessResult The filtered text, wrapped in a FilterProcessResult object, and possibly with associated assets, cacheability metadata and placeholders.
Overrides FilterInterface::process
See also
\Drupal\filter\FilterProcessResult
File
- src/
Plugin/ Filter/ EditorButtonLinkFilter.php, line 57
Class
- EditorButtonLinkFilter
- Convert data-drupal-button-link to classes for each link.
Namespace
Drupal\editor_button_link\Plugin\FilterCode
public function process($text, $langcode) {
$result = new FilterProcessResult($text);
if (stristr($text, 'data-drupal-button-link') !== FALSE) {
$dom = Html::load($text);
$xpath = new \DOMXPath($dom);
$button_link_elements = $xpath
->query('//a[@data-drupal-button-link]');
if (!is_null($button_link_elements)) {
foreach ($button_link_elements as $element) {
$setting_classes = [];
if ($element
->getAttribute('data-drupal-button-link')) {
$setting_classes = array_merge($setting_classes, explode(' ', $element
->getAttribute('data-drupal-button-link')));
}
if ($element
->getAttribute('data-drupal-button-link-size')) {
$setting_classes = array_merge($setting_classes, explode(' ', $element
->getAttribute('data-drupal-button-link-size')));
}
if ($element
->getAttribute('data-drupal-button-link-style')) {
$setting_classes = array_merge($setting_classes, explode(' ', $element
->getAttribute('data-drupal-button-link-style')));
}
if ($element
->getAttribute('class')) {
$setting_classes = array_filter(array_merge($setting_classes, explode(' ', $element
->getAttribute('class'))));
}
// Sanitize all class names.
$all_classes = array_map('Drupal\\Component\\Utility\\Html::getClass', $setting_classes);
// Remove any duplicate classes.
$all_classes = array_unique($all_classes);
// Convert array of classes to a string.
$all_classes = implode(' ', $all_classes);
$element
->setAttribute('class', $all_classes);
}
}
$result
->setProcessedText(Html::serialize($dom));
}
return $result;
}