Issue #2275491 by tstoeckler: Fixed CKEditor does not support the "readonly" attribute.

8.0.x
Alex Pott 2014-06-08 20:48:38 -05:00
parent 6ef0c0f98a
commit 53fa22cf56
3 changed files with 16 additions and 6 deletions

View File

@ -10,6 +10,15 @@
format.editorSettings.drupal = { format.editorSettings.drupal = {
format: format.format format: format.format
}; };
// CKEditor initializes itself in a read-only state if the 'disabled'
// attribute is set. It does not respect the 'readonly' attribute,
// however, so we set the 'readOnly' configuration property manually in
// that case.
if (element.hasAttribute('readonly')) {
format.editorSettings.readOnly = true;
}
return !!CKEDITOR.replace(element, format.editorSettings); return !!CKEDITOR.replace(element, format.editorSettings);
}, },

View File

@ -257,9 +257,9 @@ function editor_pre_render_format($element) {
} }
// filter_process_format() copies properties to the expanded 'value' child // filter_process_format() copies properties to the expanded 'value' child
// element. Skip this text format widget, if it contains no 'format' or when // element, including the #pre_render property. Skip this text format widget,
// the current user does not have access to edit the value. // if it contains no 'format'.
if (!isset($element['format']) || !empty($element['value']['#disabled'])) { if (!isset($element['format'])) {
return $element; return $element;
} }
$format_ids = array_keys($element['format']['format']['#options']); $format_ids = array_keys($element['format']['format']['#options']);

View File

@ -146,11 +146,12 @@ class EditorLoadingTest extends WebTestBase {
)); ));
// The untrusted user tries to edit content that is written in a text format // The untrusted user tries to edit content that is written in a text format
// that (s)he is not allowed to use. // that (s)he is not allowed to use. The editor is still loaded. CKEditor,
// for example, supports being loaded in a disabled state.
$this->drupalGet('node/1/edit'); $this->drupalGet('node/1/edit');
list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck(); list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck();
$this->assertFalse($editor_settings_present, 'No Text Editor module settings.'); $this->assertTrue($editor_settings_present, 'Text Editor module settings.');
$this->assertFalse($editor_js_present, 'No Text Editor JavaScript.'); $this->assertTrue($editor_js_present, 'Text Editor JavaScript.');
$this->assertTrue(count($body) === 1, 'A body field exists.'); $this->assertTrue(count($body) === 1, 'A body field exists.');
$this->assertFieldByXPath('//textarea[@id="edit-body-0-value" and @disabled="disabled"]', t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Text format access denied message found.'); $this->assertFieldByXPath('//textarea[@id="edit-body-0-value" and @disabled="disabled"]', t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Text format access denied message found.');
$this->assertTrue(count($format_selector) === 0, 'No text format selector exists on the page.'); $this->assertTrue(count($format_selector) === 0, 'No text format selector exists on the page.');