-
-
-
'
24 | filter_html_help: true
25 | filter_html_nofollow: false
26 | filter_url:
27 | id: filter_url
28 | provider: filter
29 | status: true
30 | weight: 0
31 | settings:
32 | filter_url_length: 72
33 |
--------------------------------------------------------------------------------
/phpstan.neon.dist:
--------------------------------------------------------------------------------
1 | includes:
2 | # - phpstan-baseline.neon
3 | - phar://phpstan.phar/conf/bleedingEdge.neon
4 |
5 | parameters:
6 | level: 7
7 |
8 | editorUrl: 'vscode://file/%%file%%:%%line%%'
9 |
10 | excludePaths:
11 | analyseAndScan:
12 | - */node_modules/*
13 | - */vendor/*
14 | - */tests/*
15 |
16 | fileExtensions:
17 | - php
18 | - module
19 | - inc
20 | - install
21 | - theme
22 | - profile
23 |
24 | treatPhpDocTypesAsCertain: false
25 | inferPrivatePropertyTypeFromConstructor: true
26 | reportUnmatchedIgnoredErrors: false
27 |
28 | ignoreErrors:
29 | - identifier: missingType.generics
30 | - identifier: missingType.iterableValue
31 | # new static() is a best practice in Drupal, so we cannot fix that.
32 | - "#^Unsafe usage of new static#"
33 | # Ignore common errors for now.
34 | - "#Drupal calls should be avoided in classes, use dependency injection instead#"
35 | - "#^Plugin definitions cannot be altered.#"
36 | - "#^Class .* extends @internal class#"
37 |
--------------------------------------------------------------------------------
/config/sync/field.field.media.image.field_media_image.yml:
--------------------------------------------------------------------------------
1 | uuid: 00c0e028-16ad-4fc0-b422-048b95ed6443
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.storage.media.field_media_image
7 | - media.type.image
8 | module:
9 | - image
10 | enforced:
11 | module:
12 | - media
13 | id: media.image.field_media_image
14 | field_name: field_media_image
15 | entity_type: media
16 | bundle: image
17 | label: Image
18 | description: ''
19 | required: true
20 | translatable: true
21 | default_value: { }
22 | default_value_callback: ''
23 | settings:
24 | handler: 'default:file'
25 | handler_settings: { }
26 | file_directory: '[date:custom:Y]-[date:custom:m]'
27 | file_extensions: 'png gif jpg jpeg'
28 | max_filesize: ''
29 | max_resolution: ''
30 | min_resolution: ''
31 | alt_field: true
32 | alt_field_required: true
33 | title_field: false
34 | title_field_required: false
35 | default_image:
36 | uuid: null
37 | alt: ''
38 | title: ''
39 | width: null
40 | height: null
41 | field_type: image
42 |
--------------------------------------------------------------------------------
/config/sync/field.field.node.article.field_image.yml:
--------------------------------------------------------------------------------
1 | uuid: 5121b421-b39b-46d5-bbb6-fe80023b78ef
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.storage.node.field_image
7 | - node.type.article
8 | module:
9 | - image
10 | _core:
11 | default_config_hash: tgJzhA7Swh4M_gWU5FwFe5lPxPj5rebpMbvhpdNrERs
12 | id: node.article.field_image
13 | field_name: field_image
14 | entity_type: node
15 | bundle: article
16 | label: Image
17 | description: ''
18 | required: false
19 | translatable: true
20 | default_value: { }
21 | default_value_callback: ''
22 | settings:
23 | handler: 'default:file'
24 | handler_settings: { }
25 | file_directory: '[date:custom:Y]-[date:custom:m]'
26 | file_extensions: 'png gif jpg jpeg'
27 | max_filesize: ''
28 | max_resolution: ''
29 | min_resolution: ''
30 | alt_field: true
31 | alt_field_required: true
32 | title_field: false
33 | title_field_required: false
34 | default_image:
35 | uuid: null
36 | alt: ''
37 | title: ''
38 | width: null
39 | height: null
40 | field_type: image
41 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.user.user.default.yml:
--------------------------------------------------------------------------------
1 | uuid: 382daee6-d2fc-4258-a920-a3bdabae2d78
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.user.user.user_picture
7 | - image.style.thumbnail
8 | module:
9 | - image
10 | - user
11 | _core:
12 | default_config_hash: K-1rBM8mTIkFp9RqOC2tMRUukOQ1xbRCfSKK8dEddnA
13 | id: user.user.default
14 | targetEntityType: user
15 | bundle: user
16 | mode: default
17 | content:
18 | account:
19 | weight: -10
20 | region: content
21 | contact:
22 | weight: 5
23 | region: content
24 | language:
25 | weight: 0
26 | region: content
27 | path:
28 | type: path
29 | weight: 30
30 | region: content
31 | settings: { }
32 | third_party_settings: { }
33 | timezone:
34 | weight: 6
35 | region: content
36 | user_picture:
37 | type: image_image
38 | weight: -1
39 | region: content
40 | settings:
41 | progress_indicator: throbber
42 | preview_image_style: thumbnail
43 | third_party_settings: { }
44 | hidden: { }
45 |
--------------------------------------------------------------------------------
/config/sync/field.field.user.user.user_picture.yml:
--------------------------------------------------------------------------------
1 | uuid: 7dc791d8-7ee1-4f31-8588-fcb1f47e83e2
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.storage.user.user_picture
7 | module:
8 | - image
9 | - user
10 | _core:
11 | default_config_hash: Iiq0AttdhgbebJwabSFwQQ1ORn64GoGz0xSZ_eyCJ8A
12 | id: user.user.user_picture
13 | field_name: user_picture
14 | entity_type: user
15 | bundle: user
16 | label: Picture
17 | description: 'Your virtual face or picture.'
18 | required: false
19 | translatable: true
20 | default_value: { }
21 | default_value_callback: ''
22 | settings:
23 | handler: 'default:file'
24 | handler_settings: { }
25 | file_directory: 'pictures/[date:custom:Y]-[date:custom:m]'
26 | file_extensions: 'png gif jpg jpeg'
27 | max_filesize: ''
28 | max_resolution: ''
29 | min_resolution: ''
30 | alt_field: false
31 | alt_field_required: false
32 | title_field: false
33 | title_field_required: false
34 | default_image:
35 | uuid: null
36 | alt: ''
37 | title: ''
38 | width: null
39 | height: null
40 | field_type: image
41 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | #
2 | # Copy and rename this file to .env at root of this project.
3 | #
4 |
5 | # A common use case is to supply database creds via the environment. Edit settings.php
6 | # like so:
7 | #
8 | # $databases['default']['default'] = [
9 | # 'database' => $_ENV['MYSQL_DATABASE'],
10 | # 'driver' => 'mysql',
11 | # 'host' => $_ENV['MYSQL_HOSTNAME'],
12 | # 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
13 | # 'password' => $_ENV['MYSQL_PASSWORD'],
14 | # 'port' => $_ENV['MYSQL_PORT'],
15 | # 'prefix' => '',
16 | # 'username' => $_ENV['MYSQL_USER'],
17 | # ];
18 | #
19 | # Uncomment and populate as needed.
20 | # MYSQL_DATABASE=
21 | # MYSQL_HOSTNAME=
22 | # MYSQL_PASSWORD=
23 | # MYSQL_PORT=
24 | # MYSQL_USER=
25 |
26 | # PGSQL_DATABASE=
27 | # PGSQL_HOSTNAME=
28 | # PGSQL_PASSWORD=
29 | # PGSQL_PORT=
30 | # PGSQL_USER=
31 |
32 | # Another common use case is to set Drush's --uri via environment.
33 | # DRUSH_OPTIONS_URI=http://example.com
34 |
35 | ## Settings file override to use, eg settings.*.php
36 | # SETTINGS_ENVIRONMENT="dev"
37 | # SETTINGS_ENVIRONMENT="staging"
38 | SETTINGS_ENVIRONMENT="prod"
39 |
--------------------------------------------------------------------------------
/drush/Commands/PolicyCommands.php:
--------------------------------------------------------------------------------
1 | input()->getArgument('target') == '@prod') {
22 | throw new \Exception(dt('Per !file, you may never overwrite the production database.', ['!file' => __FILE__]));
23 | }
24 | }
25 |
26 | /**
27 | * Limit rsync operations to production site.
28 | *
29 | * @hook validate core:rsync
30 | *
31 | * @throws \Exception
32 | */
33 | public function rsyncValidate(CommandData $commandData) {
34 | if (preg_match("/^@prod/", $commandData->input()->getArgument('target'))) {
35 | throw new \Exception(dt('Per !file, you may never rsync to the production site.', ['!file' => __FILE__]));
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/web/modules/custom/ui_icons_bootstrap/ui_icons_bootstrap.install:
--------------------------------------------------------------------------------
1 | Bootstrap icons with npm i bootstrap-icons under Drupal web directory as @path.', [
22 | ':link' => $link,
23 | '@path' => $pattern,
24 | ]);
25 |
26 | $requirements = [];
27 | $library_exists = count(glob(DRUPAL_ROOT . $pattern));
28 | $requirements['ui_icons_bootstrap'] = [
29 | 'title' => t('Icons Bootstrap'),
30 | 'value' => $library_exists ? t('Found %num @name icons', ['%num' => $library_exists, '@name' => $name]) : t('Missing icons!'),
31 | 'description' => $library_exists ? '' : $install,
32 | 'severity' => $library_exists ? REQUIREMENT_OK : REQUIREMENT_WARNING,
33 | ];
34 |
35 | return $requirements;
36 | }
37 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.media.document.default.yml:
--------------------------------------------------------------------------------
1 | uuid: b3bc1e4a-3c63-44ca-ae2b-ec7756c82d9d
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.media.document.field_media_document
7 | - media.type.document
8 | module:
9 | - file
10 | id: media.document.default
11 | targetEntityType: media
12 | bundle: document
13 | mode: default
14 | content:
15 | created:
16 | type: datetime_timestamp
17 | weight: 10
18 | region: content
19 | settings: { }
20 | third_party_settings: { }
21 | field_media_document:
22 | type: file_generic
23 | weight: 0
24 | region: content
25 | settings:
26 | progress_indicator: throbber
27 | third_party_settings: { }
28 | path:
29 | type: path
30 | weight: 30
31 | region: content
32 | settings: { }
33 | third_party_settings: { }
34 | status:
35 | type: boolean_checkbox
36 | weight: 100
37 | region: content
38 | settings:
39 | display_label: true
40 | third_party_settings: { }
41 | uid:
42 | type: entity_reference_autocomplete
43 | weight: 5
44 | region: content
45 | settings:
46 | match_operator: CONTAINS
47 | match_limit: 10
48 | size: 60
49 | placeholder: ''
50 | third_party_settings: { }
51 | hidden:
52 | name: true
53 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.media.audio.default.yml:
--------------------------------------------------------------------------------
1 | uuid: 2e57b647-0429-49fb-96b4-42ced676378e
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.media.audio.field_media_audio_file
7 | - media.type.audio
8 | module:
9 | - file
10 | - path
11 | id: media.audio.default
12 | targetEntityType: media
13 | bundle: audio
14 | mode: default
15 | content:
16 | created:
17 | type: datetime_timestamp
18 | weight: 10
19 | region: content
20 | settings: { }
21 | third_party_settings: { }
22 | field_media_audio_file:
23 | type: file_generic
24 | weight: 0
25 | region: content
26 | settings:
27 | progress_indicator: throbber
28 | third_party_settings: { }
29 | path:
30 | type: path
31 | weight: 30
32 | region: content
33 | settings: { }
34 | third_party_settings: { }
35 | status:
36 | type: boolean_checkbox
37 | weight: 100
38 | region: content
39 | settings:
40 | display_label: true
41 | third_party_settings: { }
42 | uid:
43 | type: entity_reference_autocomplete
44 | weight: 5
45 | region: content
46 | settings:
47 | match_operator: CONTAINS
48 | match_limit: 10
49 | size: 60
50 | placeholder: ''
51 | third_party_settings: { }
52 | hidden:
53 | name: true
54 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.media.video.default.yml:
--------------------------------------------------------------------------------
1 | uuid: 217d6a86-efa3-448e-86b0-0dd9a576907f
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.media.video.field_media_video_file
7 | - media.type.video
8 | module:
9 | - file
10 | - path
11 | id: media.video.default
12 | targetEntityType: media
13 | bundle: video
14 | mode: default
15 | content:
16 | created:
17 | type: datetime_timestamp
18 | weight: 10
19 | region: content
20 | settings: { }
21 | third_party_settings: { }
22 | field_media_video_file:
23 | type: file_generic
24 | weight: 0
25 | region: content
26 | settings:
27 | progress_indicator: throbber
28 | third_party_settings: { }
29 | path:
30 | type: path
31 | weight: 30
32 | region: content
33 | settings: { }
34 | third_party_settings: { }
35 | status:
36 | type: boolean_checkbox
37 | weight: 100
38 | region: content
39 | settings:
40 | display_label: true
41 | third_party_settings: { }
42 | uid:
43 | type: entity_reference_autocomplete
44 | weight: 5
45 | region: content
46 | settings:
47 | match_operator: CONTAINS
48 | match_limit: 10
49 | size: 60
50 | placeholder: ''
51 | third_party_settings: { }
52 | hidden:
53 | name: true
54 |
--------------------------------------------------------------------------------
/config/sync/filter.format.basic_html.yml:
--------------------------------------------------------------------------------
1 | uuid: 9b2757b2-4111-4943-936b-ba3476e18ee8
2 | langcode: en
3 | status: true
4 | dependencies:
5 | module:
6 | - editor
7 | _core:
8 | default_config_hash: P8ddpAIKtawJDi5SzOwCzVnnNYqONewSTJ6Xn0dW_aQ
9 | name: 'Basic HTML'
10 | format: basic_html
11 | weight: 0
12 | filters:
13 | editor_file_reference:
14 | id: editor_file_reference
15 | provider: editor
16 | status: true
17 | weight: 11
18 | settings: { }
19 | filter_align:
20 | id: filter_align
21 | provider: filter
22 | status: true
23 | weight: 7
24 | settings: { }
25 | filter_caption:
26 | id: filter_caption
27 | provider: filter
28 | status: true
29 | weight: 8
30 | settings: { }
31 | filter_html:
32 | id: filter_html
33 | provider: filter
34 | status: true
35 | weight: -10
36 | settings:
37 | allowed_html: ' -
-
-
'
38 | filter_html_help: false
39 | filter_html_nofollow: false
40 | filter_html_image_secure:
41 | id: filter_html_image_secure
42 | provider: filter
43 | status: true
44 | weight: 9
45 | settings: { }
46 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.media.image.default.yml:
--------------------------------------------------------------------------------
1 | uuid: f7bcee20-4bbd-414f-b53a-7e2af5478954
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.media.image.field_media_image
7 | - image.style.thumbnail
8 | - media.type.image
9 | module:
10 | - image
11 | id: media.image.default
12 | targetEntityType: media
13 | bundle: image
14 | mode: default
15 | content:
16 | created:
17 | type: datetime_timestamp
18 | weight: 10
19 | region: content
20 | settings: { }
21 | third_party_settings: { }
22 | field_media_image:
23 | type: image_image
24 | weight: 0
25 | region: content
26 | settings:
27 | progress_indicator: throbber
28 | preview_image_style: thumbnail
29 | third_party_settings: { }
30 | path:
31 | type: path
32 | weight: 30
33 | region: content
34 | settings: { }
35 | third_party_settings: { }
36 | status:
37 | type: boolean_checkbox
38 | weight: 100
39 | region: content
40 | settings:
41 | display_label: true
42 | third_party_settings: { }
43 | uid:
44 | type: entity_reference_autocomplete
45 | weight: 5
46 | region: content
47 | settings:
48 | match_operator: CONTAINS
49 | match_limit: 10
50 | size: 60
51 | placeholder: ''
52 | third_party_settings: { }
53 | hidden:
54 | name: true
55 |
--------------------------------------------------------------------------------
/config/sync/core.entity_form_display.media.remote_video.default.yml:
--------------------------------------------------------------------------------
1 | uuid: b50a502c-53f4-4b38-b8de-8353d3c33dcf
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - field.field.media.remote_video.field_media_oembed_video
7 | - media.type.remote_video
8 | module:
9 | - media
10 | - path
11 | id: media.remote_video.default
12 | targetEntityType: media
13 | bundle: remote_video
14 | mode: default
15 | content:
16 | created:
17 | type: datetime_timestamp
18 | weight: 10
19 | region: content
20 | settings: { }
21 | third_party_settings: { }
22 | field_media_oembed_video:
23 | type: oembed_textfield
24 | weight: 0
25 | region: content
26 | settings:
27 | size: 60
28 | placeholder: ''
29 | third_party_settings: { }
30 | path:
31 | type: path
32 | weight: 30
33 | region: content
34 | settings: { }
35 | third_party_settings: { }
36 | status:
37 | type: boolean_checkbox
38 | weight: 100
39 | region: content
40 | settings:
41 | display_label: true
42 | third_party_settings: { }
43 | uid:
44 | type: entity_reference_autocomplete
45 | weight: 5
46 | region: content
47 | settings:
48 | match_operator: CONTAINS
49 | match_limit: 10
50 | size: 60
51 | placeholder: ''
52 | third_party_settings: { }
53 | hidden:
54 | name: true
55 |
--------------------------------------------------------------------------------
/web/modules/custom/ui_icons_bootstrap/ui_icons_bootstrap.icons.yml:
--------------------------------------------------------------------------------
1 | # Recommended sprite version, only one file.
2 | bootstrap:
3 | enabled: true
4 | label: "Bootstrap"
5 | description: "Bootstrap icons from SVG Sprite single source."
6 | links:
7 | - https://icons.getbootstrap.com/#usage
8 | version: 1.13.1
9 | license:
10 | name: MIT
11 | url: https://github.com/twbs/icons/blob/main/LICENSE
12 | gpl-compatible: true
13 | extractor: svg_sprite
14 | config:
15 | sources:
16 | - /libraries/bootstrap-icons/bootstrap-icons.svg
17 | settings:
18 | size:
19 | title: "Size"
20 | type: "integer"
21 | default: 32
22 | color:
23 | title: "Color"
24 | type: "string"
25 | format: "color"
26 | alt:
27 | title: "Alt text"
28 | type: "string"
29 | description: "Accessibility alternative text, leave empty for decorative icon."
30 | class:
31 | title: "Class"
32 | type: "string"
33 | template: >-
34 |
47 |
--------------------------------------------------------------------------------
/config/sync/core.entity_view_display.node.article.teaser.yml:
--------------------------------------------------------------------------------
1 | uuid: 8e060a3f-5d91-4067-b0b4-2804e020949f
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - core.entity_view_mode.node.teaser
7 | - field.field.node.article.body
8 | - field.field.node.article.comment
9 | - field.field.node.article.field_image
10 | - field.field.node.article.field_tags
11 | - image.style.medium
12 | - node.type.article
13 | module:
14 | - image
15 | - text
16 | - user
17 | _core:
18 | default_config_hash: 4NcL2hSQZBpJbYtNuh5jC6kyQTcAc1m5bQpTegEWEso
19 | id: node.article.teaser
20 | targetEntityType: node
21 | bundle: article
22 | mode: teaser
23 | content:
24 | body:
25 | type: text_summary_or_trimmed
26 | label: hidden
27 | settings:
28 | trim_length: 600
29 | third_party_settings: { }
30 | weight: 0
31 | region: content
32 | field_image:
33 | type: image
34 | label: hidden
35 | settings:
36 | image_link: content
37 | image_style: medium
38 | image_loading:
39 | attribute: lazy
40 | third_party_settings: { }
41 | weight: -1
42 | region: content
43 | field_tags:
44 | type: entity_reference_label
45 | label: above
46 | settings:
47 | link: true
48 | third_party_settings: { }
49 | weight: 10
50 | region: content
51 | links:
52 | weight: 100
53 | region: content
54 | hidden:
55 | comment: true
56 | field_tags: true
57 |
--------------------------------------------------------------------------------
/config/sync/core.extension.yml:
--------------------------------------------------------------------------------
1 | _core:
2 | default_config_hash: R4IF-ClDHXxblLcG0L7MgsLvfBIMAvi_skumNFQwkDc
3 | module:
4 | admin_toolbar: 0
5 | admin_toolbar_links_access_filter: 0
6 | admin_toolbar_search: 0
7 | admin_toolbar_tools: 0
8 | automated_cron: 0
9 | big_pipe: 0
10 | big_pipe_sessionless: 0
11 | block: 0
12 | block_content: 0
13 | breakpoint: 0
14 | ckeditor5: 0
15 | comment: 0
16 | config: 0
17 | config_split: 0
18 | config_update: 0
19 | config_update_ui: 0
20 | contact: 0
21 | contextual: 0
22 | ctools: 0
23 | ctools_block: 0
24 | ctools_views: 0
25 | datetime: 0
26 | dblog: 0
27 | dynamic_page_cache: 0
28 | editor: 0
29 | field: 0
30 | field_ui: 0
31 | file: 0
32 | filter: 0
33 | help: 0
34 | history: 0
35 | image: 0
36 | inline_form_errors: 0
37 | layout_builder: 0
38 | layout_discovery: 0
39 | link: 0
40 | mailsystem: 0
41 | media: 0
42 | media_library: 0
43 | menu_link_content: 0
44 | menu_ui: 0
45 | mysql: 0
46 | node: 0
47 | options: 0
48 | page_cache: 0
49 | path: 0
50 | path_alias: 0
51 | redirect: 0
52 | redirect_404: 0
53 | responsive_image: 0
54 | search: 0
55 | settings_tray: 0
56 | simplei: 0
57 | system: 0
58 | taxonomy: 0
59 | text: 0
60 | token: 0
61 | toolbar: 0
62 | update: 0
63 | user: 0
64 | views_ui: 0
65 | pathauto: 1
66 | views: 10
67 | minimal: 1000
68 | theme:
69 | claro: 0
70 | olivero: 0
71 | profile: minimal
72 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: install nuke status
2 |
3 | install:
4 | @ddev start -y
5 | @ddev composer install -v
6 |
7 | install-site:
8 | @if [ ! -f ./.env ]; then cp ./.env.example ./.env; fi;
9 | @sed -i "s/# SETTINGS_ENVIRONMENT=\"dev\"/SETTINGS_ENVIRONMENT=\"dev\"/g" ./.env;
10 | @sed -i "s/SETTINGS_ENVIRONMENT=\"prod\"/# SETTINGS_ENVIRONMENT=\"prod\"/g" ./.env;
11 | @sed -i "s/# DRUSH_OPTIONS_URI=http:\/\/example.com/DRUSH_OPTIONS_URI=https:\/\/drupal-tpl.ddev.site/g" ./.env;
12 | @ddev start -y
13 | @ddev exec drush -y si --existing-config --account-name=admin --account-pass=password
14 | @echo "Login with: admin / password at https://drupal-tpl.ddev.site/user/login"
15 | @echo "Or use this direct link:"
16 | @echo ddev drush uli
17 |
18 | nuke:
19 | @composer nuke
20 | @rm -f ./.env
21 |
22 | st: status
23 | status:
24 | @ddev exec drush status;
25 |
26 | login: uli
27 | uli:
28 | @ddev exec drush uli;
29 |
30 | qa:
31 | @ echo '>> Run PHPcs from config file phpcs.xml.dist...'
32 | @ if ddev exec vendor/bin/phpcs --colors -s -p --parallel=75 --report-full --report-summary; then exit 0; else exit 0; fi
33 | @ echo '>> Run PHPMD from config file phpmd.xml.dist...'
34 | @ if ddev exec vendor/bin/phpmd web/modules/custom/ --exclude 'tests/*,**/tests/*' text phpmd.xml.dist --ignore-errors-on-exit --ignore-violations-on-exit; then exit 0; else exit 0; fi
35 | @ echo '>> Run PHPStan from config file phpsta.neon.dist...'
36 | @ if ddev exec vendor/bin/phpstan analyse web/modules/custom; then exit 0; else exit 0; fi
37 |
--------------------------------------------------------------------------------
/config/sync/editor.editor.basic_html.yml:
--------------------------------------------------------------------------------
1 | uuid: 46a63c12-90c1-4a08-bb8c-2ad07ce49c42
2 | langcode: en
3 | status: true
4 | dependencies:
5 | config:
6 | - filter.format.basic_html
7 | module:
8 | - ckeditor5
9 | format: basic_html
10 | editor: ckeditor5
11 | settings:
12 | toolbar:
13 | items:
14 | - bold
15 | - italic
16 | - '|'
17 | - link
18 | - '|'
19 | - bulletedList
20 | - numberedList
21 | - '|'
22 | - blockQuote
23 | - drupalInsertImage
24 | - '|'
25 | - heading
26 | - code
27 | - '|'
28 | - sourceEditing
29 | plugins:
30 | ckeditor5_heading:
31 | enabled_headings:
32 | - heading2
33 | - heading3
34 | - heading4
35 | - heading5
36 | - heading6
37 | ckeditor5_imageResize:
38 | allow_resize: true
39 | ckeditor5_list:
40 | properties:
41 | reversed: false
42 | startIndex: true
43 | multiBlock: true
44 | ckeditor5_sourceEditing:
45 | allowed_tags:
46 | - ''
47 | - '