From 0be28f54cdc0a59753b54b2c5b6cf2254d427fa9 Mon Sep 17 00:00:00 2001 From: Wojtek Kukowski <w.kukowski@cksource.com> Date: Wed, 12 Feb 2025 10:44:53 +0100 Subject: [PATCH 1/3] 3472777 Add option to attach To-Do List styles to all pages --- ...ugin_pack_todo_document_list.ckeditor5.yml | 5 +- ...ugin_pack_todo_document_list.libraries.yml | 6 ++ ...tor5_plugin_pack_todo_document_list.module | 18 +++++ ..._plugin_pack_todo_document_list.schema.yml | 8 +++ .../css/todo-list.css | 8 +++ .../src/Plugin/CKEditor5Plugin/ToDoList.php | 72 +++++++++++++++++++ 6 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 modules/ckeditor5_plugin_pack_todo_document_list/config/schema/ckeditor5_plugin_pack_todo_document_list.schema.yml create mode 100644 modules/ckeditor5_plugin_pack_todo_document_list/css/todo-list.css create mode 100644 modules/ckeditor5_plugin_pack_todo_document_list/src/Plugin/CKEditor5Plugin/ToDoList.php 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 eb787ee..fabd48c 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 1dc880c..aad26ae 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 a990640..1beaac4 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,21 @@ 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(); + if (isset($settings["plugins"]["ckeditor5_plugin_pack_todo-document-list__todo-document-list"]) && isset($settings["plugins"]["ckeditor5_plugin_pack_todo-document-list__todo-document-list"]["attach_default_styles"]) && $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 0000000..4a9913f --- /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 0000000..014e58a --- /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 0000000..07d74e2 --- /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('Attach default styles'), + '#description' => $this->t('Attaches To-Do List styles to all pages.'), + '#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; + } + +} -- GitLab From bd976223d6c8baa17632be06e6801bcf960855d0 Mon Sep 17 00:00:00 2001 From: Wojtek Kukowski <w.kukowski@cksource.com> Date: Thu, 13 Feb 2025 22:00:17 +0100 Subject: [PATCH 2/3] Update label and description --- .../src/Plugin/CKEditor5Plugin/ToDoList.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 07d74e2..9fde833 100644 --- 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 @@ -40,8 +40,8 @@ class ToDoList extends CKEditor5PluginDefault implements CKEditor5PluginConfigur public function buildConfigurationForm(array $form, FormStateInterface $form_state): array { $form['attach_default_styles'] = [ '#type' => 'checkbox', - '#title' => $this->t('Attach default styles'), - '#description' => $this->t('Attaches To-Do List styles to all pages.'), + '#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, ]; -- GitLab From fdc9919f10b1e726d2fc4b2ab72fe324819e68c5 Mon Sep 17 00:00:00 2001 From: Wojtek Kukowski <w.kukowski@cksource.com> Date: Tue, 4 Mar 2025 11:28:53 +0100 Subject: [PATCH 3/3] 3472777 fix --- .../ckeditor5_plugin_pack_todo_document_list.module | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 1beaac4..e3d0b00 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 @@ -42,7 +42,8 @@ function ckeditor5_plugin_pack_todo_document_list_preprocess_page(&$variables): } $settings = $editor->getSettings(); - if (isset($settings["plugins"]["ckeditor5_plugin_pack_todo-document-list__todo-document-list"]) && isset($settings["plugins"]["ckeditor5_plugin_pack_todo-document-list__todo-document-list"]["attach_default_styles"]) && $settings["plugins"]["ckeditor5_plugin_pack_todo-document-list__todo-document-list"]["attach_default_styles"]) { + $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; } -- GitLab