class CustomConfig in CKEditor custom config 8.3
Same name and namespace in other branches
- 8 src/Plugin/CKEditorPlugin/CustomConfig.php \Drupal\ckeditor_config\Plugin\CKEditorPlugin\CustomConfig
- 8.2 src/Plugin/CKEditorPlugin/CustomConfig.php \Drupal\ckeditor_config\Plugin\CKEditorPlugin\CustomConfig
Defines the "customconfig" plugin.
Plugin annotation
@CKEditorPlugin(
id = "customconfig",
label = @Translation("CKEditor custom configuration")
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\ckeditor\CKEditorPluginBase implements CKEditorPluginButtonsInterface, CKEditorPluginInterface
- class \Drupal\ckeditor_config\Plugin\CKEditorPlugin\CustomConfig implements CKEditorPluginConfigurableInterface, CKEditorPluginContextualInterface
- class \Drupal\ckeditor\CKEditorPluginBase implements CKEditorPluginButtonsInterface, CKEditorPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of CustomConfig
File
- src/
Plugin/ CKEditorPlugin/ CustomConfig.php, line 20
Namespace
Drupal\ckeditor_config\Plugin\CKEditorPluginView source
class CustomConfig extends CKEditorPluginBase implements CKEditorPluginConfigurableInterface, CKEditorPluginContextualInterface {
/**
* {@inheritdoc}
*/
public function isInternal() {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function getFile() {
return FALSE;
}
/**
* {@inheritdoc}
*/
public function isEnabled(Editor $editor) {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function getButtons() {
return [];
}
/**
* {@inheritdoc}
*/
public function getConfig(Editor $editor) {
$config = [];
$settings = $editor
->getSettings();
if (!isset($settings['plugins']['customconfig']['ckeditor_custom_config'])) {
return $config;
}
$custom_config = $settings['plugins']['customconfig']['ckeditor_custom_config'];
// Check if custom config is populated.
if (!empty($custom_config)) {
// Build array from string.
$config_array = preg_split('/\\R/', $custom_config);
// Loop through config lines and append to editorSettings.
foreach ($config_array as $config_value) {
$exploded_value = explode(" = ", $config_value);
$key = $exploded_value[0];
$value = $exploded_value[1];
// Convert true/false strings to boolean values.
if (strcasecmp($value, 'true') == 0 || strcasecmp($value, 'false') == 0) {
$value = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}
// Convert numeric values to integers.
if (is_numeric($value)) {
$value = (int) $value;
}
// If the value is boolean, then don't try to process as JSON.
if (is_bool($value)) {
$config['ckeditor_custom_config'][$key] = $value;
}
else {
$json = '{ "' . $key . '": ' . $value . ' }';
$decoded_json = Json::decode($json, TRUE);
// If value can be decoded, then append to config.
if (!is_null($decoded_json)) {
$config['ckeditor_custom_config'][$key] = $decoded_json[$key];
}
}
}
}
return $config;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state, Editor $editor) {
$config = [
'ckeditor_custom_config' => '',
];
$settings = $editor
->getSettings();
if (isset($settings['plugins']['customconfig'])) {
$config = $settings['plugins']['customconfig'];
}
// Load Editor settings.
$settings = $editor
->getSettings();
$form['ckeditor_custom_config'] = [
'#type' => 'textarea',
'#title' => $this
->t('CKEditor Custom Configuration'),
'#default_value' => $config['ckeditor_custom_config'],
'#description' => $this
->t('Each line may contain a CKEditor configuration setting formatted as "<code>[setting.name] = [value]</code>" with the value being formatted as valid JSON. See <a href="@url">https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html</a> for more details. Note: the examples in the official documentation are provided in Javascript, not JSON.<br><br>Examples: \'<code>forcePasteAsPlainText = true</code>\', \'<code>forceSimpleAmpersand = false</code>\', \'<code>removePlugins = "font"</code>\', \'<code>tabIndex = 3</code>\', \'<code>format_h2 = { "element": "h2", "attributes": { "class": "contentTitle2" } }</code>\'', [
'@url' => 'https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html',
]),
'#attached' => [
'library' => [
'ckeditor_config/ckeditor_config.customconfig',
],
],
'#element_validate' => [
[
$this,
'validateCustomConfig',
],
],
];
return $form;
}
/**
* Custom validator for the "custom_config" element in settingsForm().
*/
public function validateCustomConfig(array $element, FormStateInterface $form_state) {
// Convert submitted value into an array. Return is empty.
$config_value = $element['#value'];
if (empty($config_value)) {
return;
}
$config_array = preg_split('/\\R/', $config_value);
// Loop through lines.
$i = 1;
foreach ($config_array as $config_value) {
// Check that syntax matches "[something] = [something]".
preg_match('/(.*?) \\= (.*)/', $config_value, $matches);
if (empty($matches)) {
$form_state
->setError($element, $this
->t('The configuration syntax on line @line is incorrect. The correct syntax is "[setting.name] = [value]"', [
'@line' => $i,
]));
}
else {
// Check is value is valid JSON.
$exploded_value = explode(" = ", $config_value);
$key = $exploded_value[0];
$value = $exploded_value[1];
// Create JSON string and attempt to decode.
// If invalid, then set error.
$json = '{ "' . $key . '": ' . $value . ' }';
$decoded_json = Json::decode($json, TRUE);
if (is_null($decoded_json)) {
$form_state
->setError($element, $this
->t('The configuration value on line @line is not valid JSON.', [
'@line' => $i,
]));
}
}
$i++;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
CKEditorPluginBase:: |
public | function |
Returns a list of plugins this plugin requires. Overrides CKEditorPluginInterface:: |
1 |
CKEditorPluginBase:: |
public | function |
Returns a list of libraries this plugin requires. Overrides CKEditorPluginInterface:: |
4 |
CustomConfig:: |
public | function |
Returns the buttons that this plugin provides, along with metadata. Overrides CKEditorPluginButtonsInterface:: |
|
CustomConfig:: |
public | function |
Returns the additions to CKEDITOR.config for a specific CKEditor instance. Overrides CKEditorPluginInterface:: |
|
CustomConfig:: |
public | function |
Returns the Drupal root-relative file path to the plugin JavaScript file. Overrides CKEditorPluginInterface:: |
|
CustomConfig:: |
public | function |
Checks if this plugin should be enabled based on the editor configuration. Overrides CKEditorPluginContextualInterface:: |
|
CustomConfig:: |
public | function |
Indicates if this plugin is part of the optimized CKEditor build. Overrides CKEditorPluginBase:: |
|
CustomConfig:: |
public | function |
Returns a settings form to configure this CKEditor plugin. Overrides CKEditorPluginConfigurableInterface:: |
|
CustomConfig:: |
public | function | Custom validator for the "custom_config" element in settingsForm(). | |
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 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
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. | |
PluginBase:: |
public | function | Constructs a \Drupal\Component\Plugin\PluginBase object. | 92 |
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. |