Skip to content
Snippets Groups Projects
Verified Commit b00c9410 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3362386 by JeroenT, Wim Leers, smustgrave: CKEditor 5 should respect <textarea disabled>

parent 01747e1c
Branches
Tags
42 merge requests!12227Issue #3181946 by jonmcl, mglaman,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3546refactored dialog.pcss file,!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3502Issue #3335308: Confusing behavior with FormState::setFormState and FormState::setMethod,!3478Issue #3337882: Deleted menus are not removed from content type config,!3452Issue #3332701: Refactor Claro's tablesort-indicator stylesheet,!3451Issue #2410579: Allows setting the current language programmatically.,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3147Issue #3328457: Replace most substr($a, $i) where $i is negative with str_ends_with(),!3146Issue #3328456: Replace substr($a, 0, $i) with str_starts_with(),!3133core/modules/system/css/components/hidden.module.css,!31312878513-10.1.x,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2614Issue #2981326: Replace non-test usages of \Drupal::logger() with IoC injection,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!844Resolve #3036010 "Updaters",!673Issue #3214208: FinishResponseSubscriber could create duplicate headers,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.
Pipeline #24350 passed
Pipeline: drupal

#24355

    Pipeline: drupal

    #24354

      Pipeline: drupal

      #24353

        ......@@ -425,6 +425,11 @@
        element.removeAttribute('required');
        }
        // If the textarea is disabled, enable CKEditor's read-only mode.
        if (element.hasAttribute('disabled')) {
        editor.enableReadOnlyMode('ckeditor5_disabled');
        }
        // Integrate CKEditor 5 viewport offset with Drupal displace.
        // @see \Drupal\Tests\ckeditor5\FunctionalJavascript\CKEditor5ToolbarTest
        // @see https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorui-EditorUI.html#member-viewportOffset
        ......
        name: CKEditor 5 read-only mode test
        type: module
        description: "Provides code for testing disabled CKEditor 5 editors."
        package: Testing
        dependencies:
        - ckeditor5:ckeditor5
        <?php
        /**
        * @file
        * Implements hooks for the CKEditor 5 read-only mode test module.
        */
        declare(strict_types = 1);
        use Drupal\Core\Form\FormStateInterface;
        /**
        * Implements hook_form_alter().
        */
        function ckeditor5_read_only_mode_form_node_page_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
        $form['body']['#disabled'] = \Drupal::state()->get('ckeditor5_read_only_mode_body_enabled', FALSE);
        $form['field_second_ckeditor5_field']['#disabled'] = \Drupal::state()->get('ckeditor5_read_only_mode_second_ckeditor5_field_enabled', FALSE);
        }
        <?php
        declare(strict_types = 1);
        namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
        use Drupal\field\Entity\FieldConfig;
        use Drupal\field\Entity\FieldStorageConfig;
        /**
        * Tests read-only mode for CKEditor 5.
        *
        * @group ckeditor5
        * @internal
        */
        class CKEditor5ReadOnlyModeTest extends CKEditor5TestBase {
        /**
        * {@inheritdoc}
        */
        protected static $modules = [
        'ckeditor5_read_only_mode',
        ];
        /**
        * {@inheritdoc}
        */
        protected function setUp(): void {
        parent::setUp();
        $field_storage = FieldStorageConfig::create([
        'field_name' => 'field_second_ckeditor5_field',
        'entity_type' => 'node',
        'type' => 'text_with_summary',
        'cardinality' => 1,
        ]);
        $field_storage->save();
        // Attach an instance of the field to the page content type.
        FieldConfig::create([
        'field_storage' => $field_storage,
        'bundle' => 'page',
        'label' => 'Second CKEditor5 field',
        ])->save();
        $this->container->get('entity_display.repository')
        ->getFormDisplay('node', 'page')
        ->setComponent('field_second_ckeditor5_field', [
        'type' => 'text_textarea_with_summary',
        ])
        ->save();
        }
        /**
        * Test that disabling a CKEditor 5 field results in an uneditable editor.
        */
        public function testReadOnlyMode() {
        $page = $this->getSession()->getPage();
        $assert_session = $this->assertSession();
        $this->addNewTextFormat($page, $assert_session);
        // Check that both CKEditor 5 fields are editable.
        $this->drupalGet('node/add');
        $assert_session->elementAttributeContains('css', '.field--name-body .ck-editor .ck-content', 'contenteditable', 'true');
        $assert_session->elementAttributeContains('css', '.field--name-field-second-ckeditor5-field .ck-editor .ck-content', 'contenteditable', 'true');
        $this->container->get('state')->set('ckeditor5_read_only_mode_body_enabled', TRUE);
        // Check that the first body field is no longer editable.
        $this->drupalGet('node/add');
        $assert_session->elementAttributeContains('css', '.field--name-body .ck-editor .ck-content', 'contenteditable', 'false');
        $assert_session->elementAttributeContains('css', '.field--name-field-second-ckeditor5-field .ck-editor .ck-content', 'contenteditable', 'true');
        $this->container->get('state')->set('ckeditor5_read_only_mode_second_ckeditor5_field_enabled', TRUE);
        // Both fields are disabled, check that both fields are no longer editable.
        $this->drupalGet('node/add');
        $assert_session->elementAttributeContains('css', '.field--name-body .ck-editor .ck-content', 'contenteditable', 'false');
        $assert_session->elementAttributeContains('css', '.field--name-field-second-ckeditor5-field .ck-editor .ck-content', 'contenteditable', 'false');
        }
        }
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment