class HeadingPermalinkExtension in Markdown 8.2
Plugin annotation
@MarkdownAllowedHtml(
id = "commonmark-heading-permalink",
)
@MarkdownExtension(
id = "commonmark-heading-permalink",
label = @Translation("Heading Permalink"),
description = @Translation("Makes all heading elements (<h1>, <h2>, etc) linkable so users can quickly grab a link to that specific part of the document."),
libraries = {
@ComposerPackage(
id = "league/commonmark",
object = "\League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkExtension",
customLabel = "commonmark-heading-permalink",
url = "https://commonmark.thephpleague.com/extensions/heading-permalinks/",
requirements = {
@InstallableRequirement(
id = "parser:commonmark",
callback = "::getVersion",
constraints = {"Version" = "^1.3 || ^2.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\HeadingPermalinkExtension 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 HeadingPermalinkExtension
File
- src/
Plugin/ Markdown/ CommonMark/ Extension/ HeadingPermalinkExtension.php, line 41
Namespace
Drupal\markdown\Plugin\Markdown\CommonMark\ExtensionView source
class HeadingPermalinkExtension extends BaseExtension implements AllowedHtmlInterface, PluginFormInterface, SettingsInterface {
use SettingsTrait;
/**
* {@inheritdoc}
*/
public static function defaultSettings($pluginDefinition) {
/* @var \Drupal\markdown\Annotation\InstallablePlugin $pluginDefinition */
$innerContents = '';
if (defined('\\League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkRenderer::DEFAULT_INNER_CONTENTS')) {
/* @noinspection PhpFullyQualifiedNameUsageInspection */
$innerContents = \League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkRenderer::DEFAULT_INNER_CONTENTS;
// phpcs:ignore
}
return [
'html_class' => 'heading-permalink',
'id_prefix' => 'user-content',
'inner_contents' => $innerContents,
'insert' => 'before',
'title' => 'Permalink',
];
}
/**
* {@inheritdoc}
*/
public function allowedHtmlTags(ParserInterface $parser, ActiveTheme $activeTheme = NULL) {
$tags = [];
if ($parser instanceof ExtensibleParserInterface && ($extension = $parser
->extension($this
->getPluginId())) && $extension instanceof SettingsInterface) {
$tags = FilterHtml::tagsFromHtml($extension
->getSetting('inner_contents'));
}
return $tags;
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $element, FormStateInterface $form_state) {
/** @var \Drupal\markdown\Form\SubformStateInterface $form_state */
$element += $this
->createSettingElement('html_class', [
'#type' => 'textfield',
'#title' => $this
->t('HTML Class'),
'#description' => $this
->t("The value of this nested configuration option should be a <code>string</code> that you want set as the <code><a></code> tag's class attribute."),
], $form_state);
$element += $this
->createSettingElement('id_prefix', [
'#type' => 'textfield',
'#title' => $this
->t('ID Prefix'),
'#description' => $this
->t("This should be a <code>string</code> you want prepended to HTML IDs. This prevents generating HTML ID attributes which might conflict with others in your stylesheet. A dash separator (-) will be added between the prefix and the ID. You can instead set this to an empty string ('') if you don’t want a prefix."),
], $form_state);
$element += $this
->createSettingElement('inner_contents', [
'#type' => 'textarea',
'#title' => $this
->t('Inner Contents'),
'#description' => $this
->t("This controls the HTML you want to appear inside of the generated <code><a></code> tag. Usually this would be something you'd style as some kind of link icon. By default, an embedded <a href=\":octicon-link\" target=\"_blank\">Octicon link SVG,</a> is provided, but you can replace this with any custom HTML you wish.<br>NOTE: The HTML tags and attributes saved here will be dynamically allowed using the corresponding Allowed HTML Plugin in \"Render Strategy\". This means that whatever is added here has the potential to open up security vulnerabilities.<br>If unsure or you wish for maximum security, use a non-HTML based placeholder (e.g. <code>{{ commonmark_heading_permalink_inner_contents }}</code>) value that you can replace post parsing in <code>hook_markdown_html_alter()</code>.", [
':octicon-link' => 'https://primer.style/octicons/link',
]),
], $form_state);
$element += $this
->createSettingElement('insert', [
'#type' => 'select',
'#title' => $this
->t('Insert'),
'#description' => $this
->t("This controls whether the anchor is added to the beginning of the <code><h1></code>, <code><h2></code> etc. tag or to the end."),
'#options' => [
'after' => $this
->t('After'),
'before' => $this
->t('Before'),
],
], $form_state);
$element += $this
->createSettingElement('title', [
'#type' => 'textfield',
'#title' => $this
->t('Title'),
'#description' => $this
->t("This option sets the title attribute on the <code><a></code> tag."),
], $form_state);
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsKey() {
return 'heading_permalink';
}
}
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 |
Gets this plugin's configuration. Overrides InstallablePluginBase:: |
1 |
BaseExtension:: |
public | function |
Indicates whether the extension is automatically installed with the parser. Overrides ExtensionInterface:: |
|
BaseExtension:: |
public | function |
Allows the extension to register itself with the CommonMark Environment. Overrides ExtensionInterface:: |
4 |
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 | ||
HeadingPermalinkExtension:: |
public | function |
Retrieves the allowed HTML tags. Overrides AllowedHtmlInterface:: |
|
HeadingPermalinkExtension:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
|
HeadingPermalinkExtension:: |
public static | function |
Provides the default settings for the plugin. Overrides SettingsTrait:: |
|
HeadingPermalinkExtension:: |
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 |
Sets the configuration for this plugin instance. Overrides AnnotatedPluginBase:: |
3 |
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 | ||
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. |