diff --git a/README.txt b/README.md similarity index 100% rename from README.txt rename to README.md diff --git a/css/soft_length_limit.css b/css/soft_length_limit.css index 42c031e352bc583f37185a2c9743828b9347f65f..547a9a258170e9b5655142fe9d72ecddcf50f000 100644 --- a/css/soft_length_limit.css +++ b/css/soft_length_limit.css @@ -14,11 +14,11 @@ div.soft-length-limit-tooltip.description { /* Min/Enhanced tooltip */ .fieldset-wrapper .form-item .soft-length-limit-tooltip.min-style-tooltip, .field-type-text .form-item .soft-length-limit-tooltip.min-style-tooltip, -.form-item.form-type-textfield .soft-length-limit-tooltip.min-style-tooltip, -.form-item.form-type-textarea .soft-length-limit-tooltip.min-style-tooltip { +.form-item.form-type--textfield .soft-length-limit-tooltip.min-style-tooltip, +.form-item.form-type--textarea .soft-length-limit-tooltip.min-style-tooltip { background-color: transparent; background-image: url(../img/ico_socpub_confirm.png); - background-position: left top; + background-position: left center; background-repeat: no-repeat; background-size: 15px 15px; left: auto !important; @@ -30,20 +30,20 @@ div.soft-length-limit-tooltip.description { right: 10px; } -.form-item.form-type-textfield .soft-length-limit-tooltip.min-style-tooltip { +.form-item.form-type--textfield .soft-length-limit-tooltip.min-style-tooltip { margin-left: 5px; } .fieldset-wrapper .form-item .soft-length-limit-tooltip.min-style-tooltip.under-min, -.form-item.form-type-textfield .soft-length-limit-tooltip.min-style-tooltip.under-min, +.form-item.form-type--textfield .soft-length-limit-tooltip.min-style-tooltip.under-min, .field-type-text .form-item .soft-length-limit-tooltip.min-style-tooltip.under-min, -.form-item.form-type-textarea .soft-length-limit-tooltip.min-style-tooltip.under-min { +.form-item.form-type--textarea .soft-length-limit-tooltip.min-style-tooltip.under-min { background-image: url(../img/ico_socpub_alert.png); } .fieldset-wrapper .form-item .soft-length-limit-tooltip.min-style-tooltip.exceeded, -.form-item.form-type-textfield .soft-length-limit-tooltip.min-style-tooltip.exceeded, +.form-item.form-type--textfield .soft-length-limit-tooltip.min-style-tooltip.exceeded, .field-type-text .form-item .soft-length-limit-tooltip.min-style-tooltip.exceeded, -.form-item.form-type-textarea .soft-length-limit-tooltip.min-style-tooltip.exceeded { +.form-item.form-type--textarea .soft-length-limit-tooltip.min-style-tooltip.exceeded { background-image: url(../img/ico_socpub_alert.png); } diff --git a/modules/soft_length_limit_migrate/soft_length_limit_migrate.info.yml b/modules/soft_length_limit_migrate/soft_length_limit_migrate.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..e0a8a1889d527e68fea1ea4a118d032e3ea07e2a --- /dev/null +++ b/modules/soft_length_limit_migrate/soft_length_limit_migrate.info.yml @@ -0,0 +1,5 @@ +name: Soft Length Limit Migrate +type: module +description: Migration Support for soft_length_limit +package: Migrate +core_version_requirement: ^9 || ^10 diff --git a/modules/soft_length_limit_migrate/soft_length_limit_migrate.module b/modules/soft_length_limit_migrate/soft_length_limit_migrate.module new file mode 100644 index 0000000000000000000000000000000000000000..85e6276d608f44fe1520c93fdb874d5e1f87b36a --- /dev/null +++ b/modules/soft_length_limit_migrate/soft_length_limit_migrate.module @@ -0,0 +1,39 @@ +<?php + +/** + * @file + * Soft Length Limit Migrate module. + */ + +use Drupal\migrate\Plugin\MigrateSourceInterface; +use Drupal\migrate\Plugin\MigrationInterface; +use Drupal\migrate\Row; + +/** + * Implements hook_migrate_prepare_row(). + */ +function soft_length_limit_migrate_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { + // Add migrate support to migrate D7 settings into D8 fields. + $text_fields = [ + 'text_textarea', + 'text_textfield', + 'text_textarea_with_summary', + 'text_long', + ]; + + if ($source->getPluginId() !== 'd7_field_instance_per_form_display' || !in_array($row->getSource()['type'], $text_fields)) { + return; + } + + $widget_settings = $row->getSourceProperty('widget')['settings']; + + if (!empty($widget_settings['soft_length_limit']) || !empty($widget_settings['soft_length_minimum'])) { + $constants = $row->getSourceProperty('constants'); + $constants['third_party_settings']['soft_length_limit'] = [ + 'max_limit' => $widget_settings['soft_length_limit'], + 'minimum_limit' => $widget_settings['soft_length_minimum'], + 'style_select' => $widget_settings['soft_length_style_select'], + ]; + $row->setSourceProperty('constants', $constants); + } +} diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8433b4b84a1b10b277e530f45985de1a5bbd31f --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ruleset name="phpcs-standard"> + <description>Codestyle ruleset for Drupal</description> + + <!-- Specify standards. These assume "composer global require drupal/coder"--> + <rule ref="Drupal"/> + <rule ref="DrupalPractice"/> + + <!-- Set ignore extensions. --> + <!-- @todo remove .css to check also the css files. --> + <!-- @see https://www.drupal.org/node/2867601#comment-12075633 --> + <arg name="ignore" value="*.css,*.md,*.txt"/> + +</ruleset> diff --git a/soft_length_limit.module b/soft_length_limit.module index 60fe4e0798fc9bc596a6863ecb72e1b42c077bd1..65648df94df8e7e71bdfceb1230d15fc804b3199 100644 --- a/soft_length_limit.module +++ b/soft_length_limit.module @@ -10,58 +10,20 @@ declare(strict_types = 1); use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\WidgetInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\migrate\Plugin\MigrateSourceInterface; -use Drupal\migrate\Plugin\MigrationInterface; -use Drupal\migrate\Row; - -/** - * Returns the widget settings that can be used for a soft_length widget. - * - * @return array - * An array of settings and default values for each textfield type. - */ -function _soft_length_widget_settings(string $plugin_id): array { - $settings = [ - 'string_textfield' => [ - 'max_limit' => TRUE, - 'minimum_limit' => TRUE, - 'style_select' => TRUE, - ], - 'string_textarea' => [ - 'max_limit' => TRUE, - 'minimum_limit' => TRUE, - 'style_select' => TRUE, - ], - 'text_textfield' => [ - 'max_limit' => TRUE, - 'minimum_limit' => TRUE, - 'style_select' => TRUE, - ], - 'text_textarea' => [ - 'max_limit' => TRUE, - 'minimum_limit' => TRUE, - 'style_select' => TRUE, - ], - 'text_textarea_with_summary' => [ - 'max_limit' => TRUE, - 'minimum_limit' => TRUE, - 'style_select' => TRUE, - ], - ]; - - return $settings[$plugin_id] ?? []; -} +use Drupal\soft_length_limit\SoftLengthLimitWidgetSettings; /** * Implements hook_field_widget_third_party_settings_form(). */ function soft_length_limit_field_widget_third_party_settings_form(WidgetInterface $plugin, FieldDefinitionInterface $field_definition, $form_mode, $form, FormStateInterface $form_state) { - $plugin_id = $plugin->getPluginId(); - if (!$allowed_settings = _soft_length_widget_settings($plugin_id)) { - return NULL; + if (!$allowed_settings = SoftLengthLimitWidgetSettings::allowedForPlugin($plugin->getPluginId())) { + return; } - $element = []; + $element = [ + '#type' => 'fieldset', + '#title' => 'Soft length limit', + ]; if ($allowed_settings['max_limit']) { $element['max_limit'] = [ '#type' => 'number', @@ -87,9 +49,9 @@ function soft_length_limit_field_widget_third_party_settings_form(WidgetInterfac if ($allowed_settings['style_select']) { $element['style_select'] = [ '#type' => 'checkbox', - '#title' => t('Enable enhanced view'), + '#title' => t('Minimal styling'), '#default_value' => $plugin->getThirdPartySetting('soft_length_limit', 'style_select'), - '#description' => t('Check this to enable an enhanced view of soft length states.'), + '#description' => t('Enable a minimal view of limit state, with icons.'), '#weight' => -1, ]; } @@ -103,10 +65,8 @@ function soft_length_limit_field_widget_third_party_settings_form(WidgetInterfac function soft_length_limit_field_widget_settings_summary_alter(&$summary, $context) { /* @var \Drupal\Core\Field\WidgetInterface $widget */ $widget = $context['widget']; - $plugin_id = $widget->getPluginId(); - - if (!$allowed_settings = _soft_length_widget_settings($plugin_id)) { - return NULL; + if (!$allowed_settings = SoftLengthLimitWidgetSettings::allowedForPlugin($widget->getPluginId())) { + return; } $max_limit = $allowed_settings['max_limit'] @@ -126,7 +86,7 @@ function soft_length_limit_field_widget_settings_summary_alter(&$summary, $conte $summary[] = t('Minimum recommended length: @count', ['@count' => $minimum_limit]); } if ($style_select) { - $summary[] = t('Style select: @style', ['@style' => $style_select ? 'Enabled' : 'Disabled']); + $summary[] = t('Minimal styling: @style', ['@style' => $style_select ? 'Enabled' : 'Disabled']); } } @@ -137,7 +97,7 @@ function soft_length_limit_field_widget_single_element_form_alter(&$element, For $third_party_settings = $context['widget']->getThirdPartySettings(); if (empty($third_party_settings['soft_length_limit'])) { - return NULL; + return; } $sll_config = $third_party_settings['soft_length_limit']; @@ -155,37 +115,8 @@ function soft_length_limit_field_widget_single_element_form_alter(&$element, For } if (isset($element['#type']) && $element['#type'] === 'text_format') { - $element['#attributes'] = array_merge_recursive($element['#attributes'], $element['value']['#attributes']); + $element['#attributes'] = array_merge_recursive($element['#attributes'] ?? [], $element['value']['#attributes'] ?? []); } $element['#attached']['library'][] = 'soft_length_limit/soft_length_limit'; } - -/** - * Implements hook_migrate_prepare_row(). - */ -function soft_length_limit_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { - // Add migrate support to migrate D7 settings into D8 fields. - $text_fields = [ - 'text_textarea', - 'text_textfield', - 'text_textarea_with_summary', - 'text_long', - ]; - - if ($source->getPluginId() !== 'd7_field_instance_per_form_display' || !in_array($row->getSource()['type'], $text_fields)) { - return; - } - - $widget_settings = $row->getSourceProperty('widget')['settings']; - - if (!empty($widget_settings['soft_length_limit']) || !empty($widget_settings['soft_length_minimum'])) { - $constants = $row->getSourceProperty('constants'); - $constants['third_party_settings']['soft_length_limit'] = [ - 'max_limit' => $widget_settings['soft_length_limit'], - 'minimum_limit' => $widget_settings['soft_length_minimum'], - 'style_select' => $widget_settings['soft_length_style_select'], - ]; - $row->setSourceProperty('constants', $constants); - } -} diff --git a/src/SoftLengthLimitWidgetSettings.php b/src/SoftLengthLimitWidgetSettings.php new file mode 100644 index 0000000000000000000000000000000000000000..f89b61bc0d5d5e398622d91a03668e725107ffb1 --- /dev/null +++ b/src/SoftLengthLimitWidgetSettings.php @@ -0,0 +1,48 @@ +<?php + +namespace Drupal\soft_length_limit; + +/** + * Allowed settings helper. + */ +class SoftLengthLimitWidgetSettings { + + /** + * Returns the widget settings that can be used for a soft_length widget. + * + * @return array + * An array of settings and default values for each textfield type. + */ + public static function allowedForPlugin(string $plugin_id): array { + $settings = [ + 'string_textfield' => [ + 'max_limit' => TRUE, + 'minimum_limit' => TRUE, + 'style_select' => TRUE, + ], + 'string_textarea' => [ + 'max_limit' => TRUE, + 'minimum_limit' => TRUE, + 'style_select' => TRUE, + ], + 'text_textfield' => [ + 'max_limit' => TRUE, + 'minimum_limit' => TRUE, + 'style_select' => TRUE, + ], + 'text_textarea' => [ + 'max_limit' => TRUE, + 'minimum_limit' => TRUE, + 'style_select' => TRUE, + ], + 'text_textarea_with_summary' => [ + 'max_limit' => TRUE, + 'minimum_limit' => TRUE, + 'style_select' => TRUE, + ], + ]; + + return $settings[$plugin_id] ?? []; + } + +}