function CKEditorTest::testGetJSSettings
Same name in other branches
- 8.9.x core/modules/ckeditor/tests/src/Kernel/CKEditorTest.php \Drupal\Tests\ckeditor\Kernel\CKEditorTest::testGetJSSettings()
Tests CKEditor::getJSSettings().
File
-
core/
modules/ ckeditor/ tests/ src/ Kernel/ CKEditorTest.php, line 90
Class
- CKEditorTest
- Tests for the 'CKEditor' text editor plugin.
Namespace
Drupal\Tests\ckeditor\KernelCode
public function testGetJSSettings() {
$editor = Editor::load('filtered_html');
$query_string = '?0=';
// Default toolbar.
$expected_config = $this->getDefaultInternalConfig() + [
'drupalImage_dialogTitleAdd' => 'Insert Image',
'drupalImage_dialogTitleEdit' => 'Edit Image',
'drupalLink_dialogTitleAdd' => 'Add Link',
'drupalLink_dialogTitleEdit' => 'Edit Link',
'allowedContent' => $this->getDefaultAllowedContentConfig(),
'disallowedContent' => $this->getDefaultDisallowedContentConfig(),
'toolbar' => $this->getDefaultToolbarConfig(),
'contentsCss' => $this->getDefaultContentsCssConfig(),
'extraPlugins' => 'drupalimage,drupallink',
'language' => 'en',
'stylesSet' => FALSE,
'drupalExternalPlugins' => [
'drupalimage' => $this->fileUrlGenerator
->generateString('core/modules/ckeditor/js/plugins/drupalimage/plugin.js'),
'drupallink' => $this->fileUrlGenerator
->generateString('core/modules/ckeditor/js/plugins/drupallink/plugin.js'),
],
];
$this->assertEquals($expected_config, $this->ckeditor
->getJSSettings($editor), 'Generated JS settings are correct for default configuration.');
// Customize the configuration: add button, have two contextually enabled
// buttons, and configure a CKEditor plugin setting.
$this->enableModules([
'ckeditor_test',
]);
$this->container
->get('plugin.manager.editor')
->clearCachedDefinitions();
$this->ckeditor = $this->container
->get('plugin.manager.editor')
->createInstance('ckeditor');
$this->container
->get('plugin.manager.ckeditor.plugin')
->clearCachedDefinitions();
$settings = $editor->getSettings();
$settings['toolbar']['rows'][0][0]['items'][] = 'Strike';
$settings['toolbar']['rows'][0][0]['items'][] = 'Format';
$editor->setSettings($settings);
$editor->save();
$expected_config['toolbar'][0]['items'][] = 'Strike';
$expected_config['toolbar'][0]['items'][] = 'Format';
$expected_config['format_tags'] = 'p;h2;h3;h4;h5;h6';
$expected_config['extraPlugins'] .= ',llama_contextual,llama_contextual_and_button';
$expected_config['drupalExternalPlugins']['llama_contextual'] = $this->fileUrlGenerator
->generateString('core/modules/ckeditor/tests/modules/js/llama_contextual.js');
$expected_config['drupalExternalPlugins']['llama_contextual_and_button'] = $this->fileUrlGenerator
->generateString('core/modules/ckeditor/tests/modules/js/llama_contextual_and_button.js');
$expected_config['contentsCss'][] = $this->fileUrlGenerator
->generateString('core/modules/ckeditor/tests/modules/ckeditor_test.css') . $query_string;
$this->assertEquals($expected_config, $this->ckeditor
->getJSSettings($editor), 'Generated JS settings are correct for customized configuration.');
// Change the allowed HTML tags; the "allowedContent" and "format_tags"
// settings for CKEditor should automatically be updated as well.
$format = $editor->getFilterFormat();
$format->filters('filter_html')->settings['allowed_html'] .= '<pre class> <h1> <blockquote class="*"> <address class="foo bar-* *">';
$format->save();
$expected_config['allowedContent']['pre'] = [
'attributes' => 'class',
'styles' => FALSE,
'classes' => TRUE,
];
$expected_config['allowedContent']['h1'] = [
'attributes' => FALSE,
'styles' => FALSE,
'classes' => FALSE,
];
$expected_config['allowedContent']['blockquote'] = [
'attributes' => 'class',
'styles' => FALSE,
'classes' => TRUE,
];
$expected_config['allowedContent']['address'] = [
'attributes' => 'class',
'styles' => FALSE,
'classes' => 'foo,bar-*',
];
$expected_config['format_tags'] = 'p;h1;h2;h3;h4;h5;h6;pre';
$this->assertEquals($expected_config, $this->ckeditor
->getJSSettings($editor), 'Generated JS settings are correct for customized configuration.');
// Disable the filter_html filter: allow *all *tags.
$format->setFilterConfig('filter_html', [
'status' => 0,
]);
$format->save();
$expected_config['allowedContent'] = TRUE;
$expected_config['disallowedContent'] = FALSE;
$expected_config['format_tags'] = 'p;h1;h2;h3;h4;h5;h6;pre';
$this->assertEquals($expected_config, $this->ckeditor
->getJSSettings($editor), 'Generated JS settings are correct for customized configuration.');
// Enable the filter_test_restrict_tags_and_attributes filter.
$format->setFilterConfig('filter_test_restrict_tags_and_attributes', [
'status' => 1,
'settings' => [
'restrictions' => [
'allowed' => [
'p' => TRUE,
'a' => [
'href' => TRUE,
'rel' => [
'nofollow' => TRUE,
],
'class' => [
'external' => TRUE,
],
'target' => [
'_blank' => FALSE,
],
],
'span' => [
'class' => [
'dodo' => FALSE,
],
'property' => [
'dc:*' => TRUE,
],
'rel' => [
'foaf:*' => FALSE,
],
'style' => [
'underline' => FALSE,
'color' => FALSE,
'font-size' => TRUE,
],
],
'*' => [
'style' => FALSE,
'on*' => FALSE,
'class' => [
'is-a-hipster-llama' => TRUE,
'and-more' => TRUE,
],
'data-*' => TRUE,
],
'del' => FALSE,
],
],
],
]);
$format->save();
$expected_config['allowedContent'] = [
'p' => [
'attributes' => TRUE,
'styles' => FALSE,
'classes' => 'is-a-hipster-llama,and-more',
],
'a' => [
'attributes' => 'href,rel,class,target',
'styles' => FALSE,
'classes' => 'external',
],
'span' => [
'attributes' => 'class,property,rel,style',
'styles' => 'font-size',
'classes' => FALSE,
],
'*' => [
'attributes' => 'class,data-*',
'styles' => FALSE,
'classes' => 'is-a-hipster-llama,and-more',
],
'del' => [
'attributes' => FALSE,
'styles' => FALSE,
'classes' => FALSE,
],
];
$expected_config['disallowedContent'] = [
'span' => [
'styles' => 'underline,color',
'classes' => 'dodo',
],
'*' => [
'attributes' => 'on*',
],
];
$expected_config['format_tags'] = 'p';
$this->assertEquals($expected_config, $this->ckeditor
->getJSSettings($editor), 'Generated JS settings are correct for customized configuration.');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.