diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.ckeditor5.yml b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.ckeditor5.yml index eb787eebf5e2defd54e9af104474fa2747570526..fabd48c7382927c4da37cb558c711f8b04ad3f3f 100644 --- a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.ckeditor5.yml +++ b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.ckeditor5.yml @@ -3,7 +3,8 @@ ckeditor5_plugin_pack_todo_document_list__todo_document_list: plugins: - list.TodoList drupal: - label: To-do list + label: To-do List + class: Drupal\ckeditor5_plugin_pack_todo_document_list\Plugin\CKEditor5Plugin\ToDoList elements: - <ul> - <ul class> @@ -12,7 +13,7 @@ ckeditor5_plugin_pack_todo_document_list__todo_document_list: - <label> - <label class> - <input> - - <input type tabindex disabled> + - <input type tabindex disabled checked> library: core/ckeditor5.list admin_library: ckeditor5_plugin_pack_todo_document_list/admin.todo_document_list toolbar_items: diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.libraries.yml b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.libraries.yml index 1dc880cdbea08a59a0da66fc25f3c84213824ce3..aad26ae0d3ad524787f7c09c085bd65f48ce542b 100644 --- a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.libraries.yml +++ b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.libraries.yml @@ -3,3 +3,9 @@ admin.todo_document_list: css: theme: css/todo-document-list.admin.css: { } + +style.todo_document_list: + version: 20250210 + css: + theme: + css/todo-list.css: { } diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.module b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.module index a990640fa6c08aae1a81dd1a9622cc8ebec6ab41..e3d0b00f0317b193fb9226363cb211f73cd8d2b3 100644 --- a/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.module +++ b/modules/ckeditor5_plugin_pack_todo_document_list/ckeditor5_plugin_pack_todo_document_list.module @@ -30,3 +30,22 @@ function ckeditor5_plugin_pack_todo_document_list_ckeditor5_plugin_info_alter(ar function ckeditor5_plugin_pack_todo_document_list_install($is_syncing): void { ckeditor5_plugin_pack_display_trial_info_message(); } + +/** + * Implements hook_preprocess_HOOK(). + */ +function ckeditor5_plugin_pack_todo_document_list_preprocess_page(&$variables): void { + $editors = \Drupal::entityTypeManager()->getStorage('editor')->loadMultiple(); + foreach ($editors as $editor) { + if ($editor->getEditor() !== 'ckeditor5') { + continue; + } + + $settings = $editor->getSettings(); + $isAttachOption = isset($settings["plugins"]["ckeditor5_plugin_pack_todo_document_list__todo_document_list"]["attach_default_styles"]); + if ($isAttachOption && $settings["plugins"]["ckeditor5_plugin_pack_todo_document_list__todo_document_list"]["attach_default_styles"]) { + $variables['#attached']['library'][] = 'ckeditor5_plugin_pack_todo_document_list/style.todo_document_list'; + return; + } + } +} diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/config/schema/ckeditor5_plugin_pack_todo_document_list.schema.yml b/modules/ckeditor5_plugin_pack_todo_document_list/config/schema/ckeditor5_plugin_pack_todo_document_list.schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..4a9913fa132002cd708c859e2c723dee33a15582 --- /dev/null +++ b/modules/ckeditor5_plugin_pack_todo_document_list/config/schema/ckeditor5_plugin_pack_todo_document_list.schema.yml @@ -0,0 +1,8 @@ +ckeditor5.plugin.ckeditor5_plugin_pack_todo_document_list__todo_document_list: + type: mapping + label: 'To-Do List' + mapping: + attach_default_styles: + type: boolean + label: 'Attach default styles' + diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/css/todo-list.css b/modules/ckeditor5_plugin_pack_todo_document_list/css/todo-list.css new file mode 100644 index 0000000000000000000000000000000000000000..014e58a8112e290ed6b87447e74e9d6751d50551 --- /dev/null +++ b/modules/ckeditor5_plugin_pack_todo_document_list/css/todo-list.css @@ -0,0 +1,8 @@ +.todo-list { + list-style: none; +} + +.todo-list .todo-list__label .todo-list__label__description { + vertical-align: middle; + margin: 0 0.5rem +} diff --git a/modules/ckeditor5_plugin_pack_todo_document_list/src/Plugin/CKEditor5Plugin/ToDoList.php b/modules/ckeditor5_plugin_pack_todo_document_list/src/Plugin/CKEditor5Plugin/ToDoList.php new file mode 100644 index 0000000000000000000000000000000000000000..9fde8334dea12c97c56e3f4f430d6241e94fda57 --- /dev/null +++ b/modules/ckeditor5_plugin_pack_todo_document_list/src/Plugin/CKEditor5Plugin/ToDoList.php @@ -0,0 +1,72 @@ +<?php + +/* + * Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see https://ckeditor.com/legal/ckeditor-oss-license + */ + +declare(strict_types=1); + +namespace Drupal\ckeditor5_plugin_pack_todo_document_list\Plugin\CKEditor5Plugin; + +use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface; +use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait; +use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault; +use Drupal\Core\Form\FormStateInterface; +use Drupal\editor\EditorInterface; + +/** + * CKEditor 5 To-Do List. + * + * @internal + * Plugin classes are internal. + */ +class ToDoList extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface { + + use CKEditor5PluginConfigurableTrait; + + /** + * {@inheritdoc} + */ + public function defaultConfiguration(): array { + return [ + 'attach_default_styles' => FALSE, + ]; + } + + /** + * {@inheritdoc} + */ + public function buildConfigurationForm(array $form, FormStateInterface $form_state): array { + $form['attach_default_styles'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Add styles for rendered content automatically'), + '#description' => $this->t('Use this option if you want to automatically add required CSS for To-Do List to display properly in a rendered content outside CKEditor.'), + '#default_value' => $this->configuration['attach_default_styles'] ?? FALSE, + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function validateConfigurationForm(array &$form, FormStateInterface $form_state): void { + } + + /** + * {@inheritdoc} + */ + public function submitConfigurationForm(array &$form, FormStateInterface $form_state): void { + $values = $form_state->cleanValues()->getValues(); + $this->configuration['attach_default_styles'] = (bool) $values['attach_default_styles'] ?? FALSE; + } + + /** + * {@inheritdoc} + */ + public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array { + return $static_plugin_config; + } + +}