class ExternalLinkExtension in Markdown 8.2
Plugin annotation
@MarkdownAllowedHtml(
id = "commonmark-external-links",
)
@MarkdownExtension(
id = "commonmark-external-links",
label = @Translation("External Links"),
description = @Translation("Automatically detect links to external sites and adjust the markup accordingly."),
libraries = {
@ComposerPackage(
id = "league/commonmark",
object = "\League\CommonMark\Extension\ExternalLink\ExternalLinkExtension",
customLabel = "commonmark-external-links",
url = "https://commonmark.thephpleague.com/extensions/external-links/",
requirements = {
@InstallableRequirement(
id = "parser:commonmark",
callback = "::getVersion",
constraints = {"Version" = "^1.3 || ^2.0"},
),
},
),
@ComposerPackage(
id = "league/commonmark-ext-external-link",
deprecated = @Translation("Support for this library was deprecated in markdown:8.x-2.0 and will be removed from markdown:3.0.0."),
object = "\League\CommonMark\Ext\ExternalLink\ExternalLinkExtension",
url = "https://github.com/thephpleague/commonmark-ext-external-link",
requirements = {
@InstallableRequirement(
id = "parser:commonmark",
callback = "::getVersion",
constraints = {"Version" = ">=0.19.2 <1.0.0 || ^1.0"},
),
},
),
},
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\markdown\Plugin\Markdown\AnnotatedPluginBase implements AnnotatedPluginInterface uses \Symfony\Component\DependencyInjection\ContainerAwareTrait
- class \Drupal\markdown\Plugin\Markdown\InstallablePluginBase implements InstallablePluginInterface uses PluginDependencyTrait, MoreInfoTrait
- class \Drupal\markdown\Plugin\Markdown\BaseExtension implements ExtensionInterface uses EnabledPluginTrait
- class \Drupal\markdown\Plugin\Markdown\CommonMark\BaseExtension implements ExtensionInterface uses ParserAwareTrait
- class \Drupal\markdown\Plugin\Markdown\CommonMark\Extension\ExternalLinkExtension implements PluginFormInterface, AllowedHtmlInterface, SettingsInterface uses SettingsTrait
- class \Drupal\markdown\Plugin\Markdown\CommonMark\BaseExtension implements ExtensionInterface uses ParserAwareTrait
- class \Drupal\markdown\Plugin\Markdown\BaseExtension implements ExtensionInterface uses EnabledPluginTrait
- class \Drupal\markdown\Plugin\Markdown\InstallablePluginBase implements InstallablePluginInterface uses PluginDependencyTrait, MoreInfoTrait
- class \Drupal\markdown\Plugin\Markdown\AnnotatedPluginBase implements AnnotatedPluginInterface uses \Symfony\Component\DependencyInjection\ContainerAwareTrait
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ExternalLinkExtension
File
- src/
Plugin/ Markdown/ CommonMark/ Extension/ ExternalLinkExtension.php, line 57
Namespace
Drupal\markdown\Plugin\Markdown\CommonMark\ExtensionView source
class ExternalLinkExtension extends BaseExtension implements AllowedHtmlInterface, SettingsInterface, PluginFormInterface {
use SettingsTrait {
getSettings as getSettingsTrait;
}
/**
* {@inheritdoc}
*/
public static function defaultSettings($pluginDefinition) {
/* @var \Drupal\markdown\Annotation\InstallablePlugin $pluginDefinition */
return [
'html_class' => '',
'internal_hosts' => [
'[current-request:host]',
],
'nofollow' => '',
'noopener' => 'external',
'noreferrer' => 'external',
'open_in_new_window' => TRUE,
];
}
/**
* {@inheritdoc}
*/
public function allowedHtmlTags(ParserInterface $parser, ActiveTheme $activeTheme = NULL) {
return [
'a' => [
'href' => TRUE,
'hreflang' => TRUE,
'rel' => [
'nofollow' => TRUE,
'noopener' => TRUE,
'noreferrer' => TRUE,
],
'target' => [
'_blank' => TRUE,
],
],
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $element, FormStateInterface $form_state) {
/** @var \Drupal\markdown\Form\SubformStateInterface $form_state */
$element += $this
->createSettingElement('internal_hosts', [
'#type' => 'textarea',
'#title' => $this
->t('Internal Hosts'),
'#description' => $this
->t('Defines a whitelist of hosts which are considered non-external and should not receive the external link treatment. This can be a single host name, like <code>example.com</code>, which must match exactly. Wildcard matching is also supported using regular expression like <code>/(^|\\.)example\\.com$/</code>. Note that you must use <code>/</code> characters to delimit your regex. By default, if no internal hosts are provided, all links will be considered external. One host per line.'),
], $form_state, '\\Drupal\\markdown\\Util\\KeyValuePipeConverter::denormalizeNoKeys');
$element['token'] = FormTrait::createTokenBrowser();
$element += $this
->createSettingElement('html_class', [
'#type' => 'textfield',
'#title' => $this
->t('HTML Class'),
'#description' => $this
->t('An HTML class that should be added to external link <code><a></code> tags.'),
], $form_state);
$element += $this
->createSettingElement('open_in_new_window', [
'#type' => 'checkbox',
'#title' => $this
->t('Open in a New Window'),
'#description' => $this
->t('Adds <code>target="_blank"</code> to external link <code><a></code> tags.'),
], $form_state);
$relOptions = [
'' => $this
->t('No links'),
'all' => $this
->t('All links'),
'external' => $this
->t('External links only'),
'internal' => $this
->t('Internal links only'),
];
$element += $this
->createSettingElement('nofollow', [
'#type' => 'select',
'#title' => $this
->t('No Follow'),
'#description' => $this
->t('Sets the "nofollow" value in the <code>rel</code> attribute. This value instructs search engines to not influence the ranking of the link\'s target in the search engine\'s index. Using this can negatively impact your site\'s SEO ranking if done improperly.'),
'#options' => $relOptions,
], $form_state);
$element += $this
->createSettingElement('noopener', [
'#type' => 'select',
'#title' => $this
->t('No Opener'),
'#description' => $this
->t('Sets the "noopener" value in the <code>rel</code> attribute. This value instructs the browser to prevent the new page from being able to access the the window that opened the link and forces it run in a separate process.'),
'#options' => $relOptions,
], $form_state);
$element += $this
->createSettingElement('noreferrer', [
'#type' => 'select',
'#title' => $this
->t('No Referrer'),
'#description' => $this
->t('Sets the "noreferrer" value in the <code>rel</code> attribute. This value instructs the browser from sending an HTTP referrer header to ensure that no referrer information will be leaked.'),
'#options' => $relOptions,
], $form_state);
return $element;
}
/**
* {@inheritdoc}
*/
public function getConfiguration() {
$configuration = parent::getConfiguration();
// Normalize settings from a key|value string into an associative array.
foreach ([
'internal_hosts',
] as $name) {
if (isset($configuration['settings'][$name])) {
$configuration['settings'][$name] = KeyValuePipeConverter::normalize($configuration['settings'][$name]);
}
}
return $configuration;
}
/**
* {@inheritdoc}
*/
public function getSettings($runtime = FALSE, $sorted = TRUE) {
$settings = $this
->getSettingsTrait($runtime, $sorted);
if (!$runtime) {
return $settings;
}
$token = \Drupal::token();
foreach ($settings['internal_hosts'] as &$host) {
$host = $token
->replace($host);
}
$settings['internal_hosts'] = array_unique($settings['internal_hosts']);
return $settings;
}
/**
* {@inheritdoc}
*/
public function register($environment) {
parent::register($environment);
// For older versions of this extension, certain features didn't exist.
// Add an inline rendered to take care of those features.
if (Semver::satisfies($this
->getParser()
->getVersion(), '>=0.19.2 <1.5.0')) {
$environment
->addInlineRenderer('\\League\\CommonMark\\Inline\\Element\\Link', new ExternalLinkRenderer($environment));
}
}
/**
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
// Normalize settings from a key|value string into an associative array.
foreach ([
'internal_hosts',
] as $name) {
if (isset($configuration['settings'][$name])) {
$configuration['settings'][$name] = KeyValuePipeConverter::normalize($configuration['settings'][$name]);
}
}
return parent::setConfiguration($configuration);
}
/**
* {@inheritdoc}
*/
public function settingsKey() {
return 'external_link';
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AnnotatedPluginBase:: |
protected | property | The original plugin_id that was called, not a fallback identifier. | |
AnnotatedPluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Retrieves the configuration overrides for the plugin. Overrides AnnotatedPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Retrieves the description of the plugin, if set. Overrides AnnotatedPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Retrieves the original plugin identifier. Overrides AnnotatedPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Returns the provider (extension name) of the plugin. Overrides AnnotatedPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Returns the weight of the plugin (used for sorting). Overrides AnnotatedPluginInterface:: |
|
AnnotatedPluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
|
AnnotatedPluginBase:: |
public | function | ||
BaseExtension:: |
public | function |
Indicates the default "enabled" state. Overrides EnabledPluginTrait:: |
|
BaseExtension:: |
public | function |
Indicates whether the extension is automatically installed with the parser. Overrides ExtensionInterface:: |
|
BaseExtension:: |
public | function |
Retrieves identifiers of extensions that are required by this extension. Overrides ExtensionInterface:: |
|
BaseExtension:: |
public | function |
Retrieves identifiers of extensions that this extension requires. Overrides ExtensionInterface:: |
|
BaseExtension:: |
public static | function | Validates extension settings. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DependencyTrait:: |
protected | property | The object's dependencies. | |
DependencyTrait:: |
protected | function | Adds multiple dependencies. | |
DependencyTrait:: |
protected | function | Adds a dependency. | |
EnabledPluginTrait:: |
public | function | ||
ExternalLinkExtension:: |
public | function |
Retrieves the allowed HTML tags. Overrides AllowedHtmlInterface:: |
|
ExternalLinkExtension:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
|
ExternalLinkExtension:: |
public static | function |
Provides the default settings for the plugin. Overrides SettingsTrait:: |
|
ExternalLinkExtension:: |
public | function |
Gets this plugin's configuration. Overrides BaseExtension:: |
|
ExternalLinkExtension:: |
public | function |
Retrieves the current settings. Overrides SettingsInterface:: |
|
ExternalLinkExtension:: |
public | function |
Allows the extension to register itself with the CommonMark Environment. Overrides BaseExtension:: |
|
ExternalLinkExtension:: |
public | function |
Sets the configuration for this plugin instance. Overrides InstallablePluginBase:: |
|
ExternalLinkExtension:: |
public | function |
The array key name to use when the settings are nested in another array. Overrides SettingsTrait:: |
|
InstallablePluginBase:: |
protected | property | The config for this plugin. | |
InstallablePluginBase:: |
public | function |
Builds a display for a library. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Builds a display status based on the current state of the plugin. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the config instance for this plugin. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
protected static | function | ||
InstallablePluginBase:: |
public | function |
Gets default configuration for this plugin. Overrides AnnotatedPluginBase:: |
1 |
InstallablePluginBase:: |
public | function | Retrieves available installs. | |
InstallablePluginBase:: |
protected | function | Returns the configuration name for the plugin. | |
InstallablePluginBase:: |
protected | function | Determines the configuration sort order by weight. | 1 |
InstallablePluginBase:: |
public | function | Retrieves the container. | |
InstallablePluginBase:: |
public | function |
Retrieves the deprecation message, if any. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the experimental message. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the composer package name of the installable library, if any. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the installed library used by the plugin. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Displays the human-readable label of the plugin. Overrides AnnotatedPluginBase:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the plugin as a link using its label and URL. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
@TODO: Refactor to use variadic parameters. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the class name of the object defined by the installed library. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
protected | function | 1 | |
InstallablePluginBase:: |
public | function |
Retrieves the preferred library of the plugin. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the configuration for the plugin, but sorted. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Retrieves the URL of the plugin, if set. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
The current version of the plugin. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function | ||
InstallablePluginBase:: |
public | function |
Indicates whether plugin has multiple installs to check. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Indicates whether the plugin is installed. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Indicates whether the plugin is using the preferred library. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Indicates whether the preferred library is installed. Overrides InstallablePluginInterface:: |
|
InstallablePluginBase:: |
public | function |
Indicates whether the plugin should be shown in the UI. Overrides InstallablePluginInterface:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
MoreInfoTrait:: |
protected | function | Appends existing content with a "More Info" link. | |
ParserAwareTrait:: |
protected | property | A Markdown Parser instance. | |
ParserAwareTrait:: |
public | function | 1 | |
ParserAwareTrait:: |
public | function | ||
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginDependencyTrait:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. | |
PluginDependencyTrait:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. Aliased as: getPluginDependenciesTrait | |
PluginDependencyTrait:: |
protected | function | Wraps the module handler. | |
PluginDependencyTrait:: |
protected | function | Wraps the theme handler. | |
RendererTrait:: |
protected static | property | The Renderer service. | |
RendererTrait:: |
protected | function | Retrieves the Renderer service. | |
SettingsTrait:: |
protected | function | Creates a setting element. | |
SettingsTrait:: |
public | function | ||
SettingsTrait:: |
public | function | ||
SettingsTrait:: |
public | function | ||
SettingsTrait:: |
public | function | Aliased as: getSettingsTrait | |
SettingsTrait:: |
public | function | 2 | |
SettingsTrait:: |
public | function | ||
SettingsTrait:: |
public | function | 2 | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |