Compare commits

...
Sign in to create a new pull request.

347 commits
main ... tome

Author SHA1 Message Date
5675bcfc36 Delete README.md 2025-08-04 00:58:53 +01:00
3589cdf285 Add daily email 2025-08-03 23:53:42 +01:00
c8e0fc482e Add daily email 2025-08-02 22:56:39 +01:00
a0011896e0 Add daily email 2025-08-01 00:22:21 +01:00
33f0ef7275 Add daily email 2025-07-30 23:22:59 +01:00
97359e2e42 Add daily email 2025-07-30 22:26:33 +01:00
6f022e3b45 refactor: move test
Move the test to a Repository directory so the
directory structure matches `src` and my alternate
file configuration works.
2025-07-30 00:12:39 +01:00
e4e074b17e Add daily email 2025-07-29 17:30:26 +01:00
7e98c70c3f Add daily email 2025-07-29 00:24:17 +01:00
fd865fafbb Add daily email 2025-07-27 11:50:27 +01:00
751d8d49fb Add daily email 2025-07-25 00:47:37 +01:00
766c2dc9f1 Add daily email 2025-07-23 23:18:31 +01:00
e1f46165b1 Add daily email 2025-07-23 22:54:14 +01:00
3fdf9154e7 Add daily email 2025-07-22 00:42:19 +01:00
95c6d67bd3 Update CTA text 2025-07-19 23:52:11 +01:00
2fae4c159e composer update 2025-07-19 23:43:24 +01:00
1533f34833 Add daily email 2025-07-19 23:39:41 +01:00
5cd3c30d7c Add daily email 2025-07-17 22:47:53 +01:00
eb7588803f Add daily email 2025-07-16 23:48:03 +01:00
76ed8e141b Remove http://default from content 2025-07-16 16:11:49 +01:00
025aaf3be2 Ignore files in Telescope 2025-07-15 23:09:28 +01:00
b13d4d64b1 Remove duplication of prose classes 2025-07-15 23:09:00 +01:00
2b58a18507 Change background colour 2025-07-15 22:45:45 +01:00
4e559f80eb Add daily email 2025-07-15 22:45:10 +01:00
b58aa19bd8 Add daily email 2025-07-15 21:34:41 +01:00
f101e817fc Add daily email 2025-07-15 01:00:00 +01:00
76197f02cc Add PodcastNodeRepositoryTest 2025-07-14 19:36:14 +01:00
dafc7430b9 Add daily email 2025-07-14 19:16:31 +01:00
3c04dfd710 Refactor 2025-07-13 17:42:17 +01:00
6b54631f46 Pre-populate the next podcast episode number 2025-07-13 01:16:00 +01:00
7a4c0223f9 Add daily email 2025-07-13 00:33:05 +01:00
e7740e66a7 Add daily email 2025-07-12 01:20:58 +01:00
d354c7fbde Add Mike Gifford podcast episode 2025-07-12 01:20:50 +01:00
76023a21a9 Add daily email 2025-07-11 20:49:27 +01:00
24fb8e111e Add daily email 2025-07-11 00:29:57 +01:00
aa18cfddd6 Rename test 2025-07-10 09:14:52 +01:00
9d5a930eab Migrate content to YAML 2025-07-10 08:18:17 +01:00
3d76aa0c3b Add daily email 2025-07-10 00:08:06 +01:00
fd8735b9d7 Add page 2025-07-09 23:56:53 +01:00
c1e6584e14 Add daily email 2025-07-09 00:13:14 +01:00
1cbe1d2d3b Update todo.txt 2025-07-07 22:23:44 +01:00
6b15e5c40a Add the subscription form below the body content
Add the subscription form below the body content for daily email nodes.
2025-07-07 22:23:06 +01:00
a0f25bb985 Add daily email 2025-07-06 23:48:15 +01:00
808d20ba03 Add daily email 2025-07-04 20:47:34 +01:00
6e974b6559 Add daily email 2025-07-04 13:03:15 +01:00
1e9379ba2d Add TODO 2025-07-04 12:20:31 +01:00
b92c05f298 Increase spacing 2025-07-04 11:40:26 +01:00
606c7314fc Add daily email testimonials 2025-07-04 11:00:58 +01:00
768d7f85a6 Update todo.txt 2025-07-04 08:28:00 +01:00
c816e90e06 Add a field for text alignment 2025-07-04 08:28:00 +01:00
fb3b58cf97 Add initial /daily page content 2025-07-04 08:27:59 +01:00
34c173b1c9 Show published date on daily email nodes 2025-07-02 22:04:07 +01:00
03bcd8234f Add daily email 2025-07-02 21:57:23 +01:00
5d5aacc9aa Add daily email 2025-07-02 20:15:14 +01:00
902133d94f Add "Page not found" page 2025-07-02 01:02:14 +01:00
850404f238 Add automated testing information page 2025-07-01 23:54:45 +01:00
cad9689e1e Add daily email 2025-07-01 23:29:22 +01:00
2a4bb625cf Update todo.txt 2025-07-01 15:45:39 +01:00
e07eb74824 Add related podcast episodes by the same guests 2025-07-01 12:22:22 +01:00
3c65a95895 Add daily email 2025-07-01 07:21:08 +01:00
68993fefa1 Update about me text 2025-06-30 10:38:35 +01:00
8f94839f55 Add daily email 2025-06-30 08:12:59 +01:00
222b8d977d Revert "Add daily email testimonials"
This reverts commit b9ffd0bad6.
2025-06-28 13:55:40 +01:00
d7629f1b32 Migrate from field_body to body 2025-06-28 13:47:53 +01:00
b9ffd0bad6 Add daily email testimonials 2025-06-28 13:39:39 +01:00
aec21bd9be Revert "Automated dev commit"
This reverts commit 5abc50b741.
2025-06-28 11:25:43 +01:00
d638c860d9 Add podcast episode 2025-06-28 00:53:30 +01:00
8abe2754bc Update todo.txt 2025-06-28 00:17:51 +01:00
5abc50b741 Automated dev commit 2025-06-27 23:58:33 +01:00
6de0ba179d Add daily email 2025-06-27 21:53:40 +01:00
dc00a8fd66 Add daily email 2025-06-27 10:45:47 +01:00
9aceba8e24 Add daily email 2025-06-27 10:03:46 +01:00
6e7a40976b Add daily email 2025-06-26 13:00:40 +01:00
7dcc7a2126 Classes should be final 2025-06-25 22:48:42 +01:00
431545bfc4 Add daily email 2025-06-25 08:01:15 +01:00
b9a375ecc2 Add daily email 2025-06-24 23:19:27 +01:00
4541d66d34 Refactor 2025-06-24 17:21:02 +01:00
e1c8f4f118 Remove unused trait 2025-06-24 16:43:30 +01:00
cdebc0cddb Remove unused trait 2025-06-24 16:04:21 +01:00
bde36ee056 Refactor 2025-06-24 00:59:50 +01:00
88d5d4a126 Refactor 2025-06-23 22:49:18 +01:00
6466e6a459 Refactor 2025-06-23 22:25:39 +01:00
8d3f6f694e Add daily email 2025-06-23 22:20:28 +01:00
37863c6c24 Refactor 2025-06-23 21:49:15 +01:00
460f6cfbe0 Refactor 2025-06-23 21:17:10 +01:00
08a0f18995 Remove recipes
Now these are being unpacked, I assume this directory is no longer
needed.
2025-06-23 21:11:51 +01:00
21a12b1b1a Add daily email 2025-06-23 19:58:16 +01:00
bc9df2b70a Unpack recipes
https://joshuami.com/blog/2025/recipe-unpack-blog-no-longer-drupal-cms-and-thats-good-thing
https://www.drupal.org/node/3522189
2025-06-23 00:58:47 +01:00
55aadd6ec5 Rename directory 2025-06-23 00:52:23 +01:00
4ec8ad983a devshell follows nixpkgs 2025-06-23 00:35:28 +01:00
6c3ab477e0 Configure git-hooks-nix 2025-06-22 23:38:45 +01:00
6d65e70fe3 Add the podcast module
https://www.drupal.org/project/podcast
2025-06-21 22:06:57 +01:00
05f158439f Update podcast episode node titles 2025-06-21 22:06:13 +01:00
c351a43a2a Update CTAs 2025-06-21 14:16:17 +01:00
b431389d4a Add daily email 2025-06-21 13:45:06 +01:00
8c354f2754 Refactor 2025-06-21 12:52:11 +01:00
b8c3f6d9a7 Update todo.txt 2025-06-21 01:40:06 +01:00
9c33718aff Extract dev-shell.nix module 2025-06-21 01:38:42 +01:00
8b48ed5e62 Remove redundant parentheses 2025-06-21 00:49:30 +01:00
d7491eac61 Remove unused variable 2025-06-21 00:46:02 +01:00
d828b89d25 Fix phpcs error 2025-06-21 00:43:11 +01:00
addfe15e26 Fix phpstan errors 2025-06-21 00:42:49 +01:00
9abf64b504 Don't add a CTA if an emails contains a P.S.
Don't automatically add a CTA to a daily email if the email body text
already contains a "P.S.".
2025-06-21 00:34:47 +01:00
b7f13b4be5 Refactor 2025-06-21 00:25:00 +01:00
9709d4fee0 Add TODO 2025-06-21 00:09:14 +01:00
59176d8b00 Add daily email 2025-06-21 00:09:07 +01:00
6ce4abc64e Update CTAs 2025-06-20 23:47:04 +01:00
0c372192ba Add daily email 2025-06-20 23:35:04 +01:00
046ad4a54a Add daily email 2025-06-18 22:28:51 +01:00
8a480121d2 Refactor 2025-06-17 23:31:49 +01:00
fc4121e776 Refactor 2025-06-17 23:10:04 +01:00
f08fb4cd67 Refactor 2025-06-17 17:39:26 +01:00
cddb3af518 Update todo.txt 2025-06-16 00:23:06 +01:00
229cc62b03 Fix phpstan errors 2025-06-15 17:22:37 +01:00
af83b3c431 Configure phpcs, fix errors 2025-06-15 16:31:51 +01:00
fcf0ae04bb Configure linters 2025-06-15 16:28:56 +01:00
14ac1677e1 Add daily email 2025-06-15 16:10:59 +01:00
d4264aa6b1 Make Markdown the default text format 2025-06-15 15:50:42 +01:00
e740384446 Add Drupal CMS Admin UI recipe
https://www.drupal.org/project/drupal_cms_admin_ui

```
composer require drupal/drupal_cms_admin_ui
drush recipe $(pwd)/recipes/drupal_cms_admin_ui
```
2025-06-15 15:36:01 +01:00
3ba181a753 Add Events::fromDateStrings 2025-06-15 09:59:47 +01:00
678263c75c Revert "Add PresentationBuilder"
This reverts commit 9148ec5a65.
2025-06-15 09:43:43 +01:00
8016f96b97 Update todo.txt 2025-06-15 09:31:55 +01:00
d9e671377a Add daily email 2025-06-15 09:11:49 +01:00
9148ec5a65 Add PresentationBuilder 2025-06-14 23:19:28 +01:00
a2fc812ddb Remove unused import 2025-06-14 22:32:58 +01:00
200a2a72fd Fix test 2025-06-14 22:23:58 +01:00
92c413bc80 Count past presentations 2025-06-14 22:10:24 +01:00
820f8d4055 Refactor 2025-06-14 19:10:56 +01:00
7fab80a113 Refactor 2025-06-14 18:35:34 +01:00
2d55ea78f1 Add CTAs to daily emails
Add a daily email CTA node type and reference field to attach a CTA to a
daily email.

Also update the RSS feed view to include the referenced body field
value.
2025-06-14 00:18:52 +01:00
76868079ac Update user information 2025-06-13 11:08:13 +01:00
7a1421dca3 Change the guid to be a link instead of an ID
This should prevent duplicate emails being sent after running
`tome:import` as I think the entity IDs change - causing a different
guid and the automation to trigger again for the same email.
2025-06-13 00:17:01 +01:00
15dc0e1224 Add daily email 2025-06-13 00:15:07 +01:00
c2cd2164f5 Extract a Date class for event dates 2025-06-12 23:36:40 +01:00
c2dd8a1a07 Update event names
Make them more realistic and more obvious which is the event date and
which is the event name.
2025-06-12 23:08:04 +01:00
0e3f982d99 Add watchman 2025-06-12 02:19:14 +01:00
43dac77fcd Refactor 2025-06-12 02:10:09 +01:00
8ec5b621c1 Refactor 2025-06-12 02:10:09 +01:00
c84e6ed25c Assert class instances of collection items 2025-06-12 02:10:09 +01:00
5ac1a6d95a Add import command 2025-06-12 02:10:09 +01:00
988cdeb24d Refactor 2025-06-12 02:10:09 +01:00
f1c1f18b93 Refactor 2025-06-12 02:10:09 +01:00
75e7af85b5 Refactor 2025-06-12 02:10:09 +01:00
413f5a889d Refactor 2025-06-12 02:10:09 +01:00
514f38b93c Refactor 2025-06-12 02:10:09 +01:00
9aaca6b3b5 Refactor 2025-06-12 02:10:09 +01:00
fa5942d4ba Refactor 2025-06-12 02:10:09 +01:00
aa08f702b2 Refactor 2025-06-12 02:10:09 +01:00
6fe88456ca Refactor 2025-06-12 02:10:09 +01:00
202552cdfe Refactor 2025-06-12 02:10:08 +01:00
51299096c5 Refactor 2025-06-12 02:10:08 +01:00
9308ce76a5 Refactor 2025-06-12 02:10:08 +01:00
c184f79f8a Refactor 2025-06-12 02:10:08 +01:00
6b6b362a49 Refactor
Try a different way of naming and grouping classes.
2025-06-12 02:10:08 +01:00
52c1b33711 Add a PodcastEpisode bundle class 2025-06-12 02:10:08 +01:00
0871649c05 Refactor 2025-06-12 02:10:08 +01:00
14cd79a960 Add an Event bundle class 2025-06-12 02:10:08 +01:00
f56eb931c2 Publish podcast episode with Ev 2025-06-12 02:02:18 +01:00
08fc6c66be Ensure the correct event is returned 2025-06-11 09:54:18 +01:00
4715d02ae0 Refactor 2025-06-11 09:53:34 +01:00
3c4b053e0e Use getTimestamp() method 2025-06-11 09:11:36 +01:00
7ad811d2cb Move test 2025-06-11 09:09:38 +01:00
3eda366625 Fix test 2025-06-11 09:08:52 +01:00
725704fafa Add daily email 2025-06-11 00:16:37 +01:00
77149e1dff Add Drupal Test Traits ADR 2025-06-10 22:12:33 +01:00
7f7d551312 Rename test 2025-06-10 22:03:50 +01:00
d010b12667 Extract a PresentationCreationTrait 2025-06-10 22:03:15 +01:00
f2a27cab78 Add daily email 2025-06-10 21:13:58 +01:00
b0ea499ad4 Revert "Add initial PresentationCounter logic"
This reverts commit 1fe63e7326.
2025-06-10 20:52:51 +01:00
8d8bf62f2c Return an EventCollection 2025-06-10 20:52:51 +01:00
6e19d01eed Get past events for each presentation 2025-06-10 20:52:51 +01:00
122f4a9bec Add a Presentation bundle class
Drupal core issue: https://www.drupal.org/node/2570593
Change record: https://www.drupal.org/node/3191609
2025-06-10 20:52:51 +01:00
7e45664407 Add Drupal Test Traits 2025-06-10 20:47:23 +01:00
7d8f0581c1 Change zinc to neutral 2025-06-09 22:08:47 +01:00
893ba1504e Fix dark mode in Chromium 2025-06-09 22:05:05 +01:00
e9c015075a Add tailwindcss and language server 2025-06-09 22:05:05 +01:00
9d2873230b Add daily email 2025-06-09 20:59:54 +01:00
1d6aa69ff5 Allow pre and code tags in Markdown 2025-06-09 20:59:35 +01:00
5436248fb0 Add initial ADRs 2025-06-09 20:15:27 +01:00
28260f837d Run phpstan and phpunit 2025-06-09 09:03:34 +01:00
1fe63e7326 Add initial PresentationCounter logic 2025-06-09 01:46:43 +01:00
bf8017c477 Update todo.txt 2025-06-09 01:42:15 +01:00
5fbba43e87 Add daily email 2025-06-09 01:42:15 +01:00
ed6f15c836 Update markdown filter configuration 2025-06-09 00:25:57 +01:00
1944bf6f04 Add a feed to the podcast page
The feed URL will be changed once it's recreated in Drupal.
2025-06-08 13:15:07 +01:00
c68b3485c7 Add daily email 2025-06-06 23:07:21 +01:00
656e044cd5 Add daily email 2025-06-04 00:36:10 +01:00
7b4efdf67f Add daily emails 2025-06-03 23:35:50 +01:00
e642619988 Migrate to flake-parts, remove justfile
Move the justfile recipes to devshell commands.
2025-06-03 23:35:21 +01:00
34cee8e678 Update todo.txt 2025-06-01 16:44:37 +01:00
b2b2142aa9 Add podcast episode mp3 2025-06-01 16:44:19 +01:00
3750b57bf7 Add daily email 2025-06-01 00:13:16 +01:00
1e6189b9ab Add daily email 2025-05-31 23:49:41 +01:00
f052b4f2c3 Add Gareth Alexander podcast episode 2025-05-30 17:17:35 +01:00
f20c874c19 composer update 2025-05-30 16:27:47 +01:00
331c2d8b14 Remove drupal/core-project-message 2025-05-30 16:26:49 +01:00
0c98be96eb Remove the feeds module 2025-05-30 16:24:39 +01:00
acfd1cca8d Adjust padding 2025-05-30 09:42:36 +01:00
bc877f8544 Style the active tab 2025-05-30 09:40:51 +01:00
a3479a9989 Add draft podcast episode 2025-05-30 02:43:03 +01:00
b654e7f934 Update todo.txt 2025-05-30 02:40:12 +01:00
bcc4f33015 tome export 2025-05-30 02:34:53 +01:00
8055790291 Update podcast episode titles 2025-05-30 02:34:53 +01:00
a71f77ab9f Automatically create podcast episode titles
Automatically create podcast episode titles with the auto_entitylabel
module, containing the episode number, topic and guest names.
2025-05-30 02:34:53 +01:00
54d2a8462f Populate field_topic 2025-05-30 02:34:52 +01:00
7a52afab5f tome export 2025-05-30 02:34:52 +01:00
52278c3a53 Add field_topic to podcast episodes 2025-05-30 02:34:52 +01:00
172eae44c4 Remove unused import 2025-05-30 00:43:16 +01:00
3d9ddba9d4 Update docblocks 2025-05-30 00:43:11 +01:00
bc3f3dd3e5 Return a token with the name of two guests 2025-05-30 00:34:46 +01:00
487190cb12 Return a token with the name of a single guest 2025-05-30 00:34:46 +01:00
52c5eda4a5 Update todo.txt 2025-05-29 18:40:40 +01:00
3ec7a9995c Add missing classes for the podcast landing page 2025-05-29 18:31:51 +01:00
cc557aa0fc Add phpstan 2025-05-29 18:31:49 +01:00
90e8e68fa8 Add drupal/rel_to_abs
For daily emails, I want all links to be absolute URLs so they work when
embedded in the sent emails.

This module does this.

As there is no Drupal 11 compatible release, I've had to add the Lenient
Composer endpoint and add patch the rel_to_abs module to make it D11
compatible.

If everything works, I'll update the issue and mark it as RTBC.

https://www.drupal.org/project/rel_to_abs
https://www.drupal.org/docs/develop/using-composer/using-the-drupal-lenient-composer-plugin
https://github.com/cweagans/composer-patches
https://www.drupal.org/project/rel_to_abs/issues/3434164
2025-05-29 18:31:49 +01:00
1c917c4ec8 Add .nvim.lua 2025-05-29 16:46:58 +01:00
c4cc76da78 Add todo.txt 2025-05-29 16:46:30 +01:00
7a7dc297ca Make all links relative
Now the abs_to_rel module is enabled, links can be made relative so they
work on the current environment.
2025-05-29 16:42:25 +01:00
0d359f81d6 Add drupal/rel_to_abs
For daily emails, I want all links to be absolute URLs so they work when
embedded in the sent emails.

This module does this.

As there is no Drupal 11 compatible release, I've had to add the Lenient
Composer endpoint and add patch the rel_to_abs module to make it D11
compatible.

If everything works, I'll update the issue and mark it as RTBC.

https://www.drupal.org/project/rel_to_abs
https://www.drupal.org/docs/develop/using-composer/using-the-drupal-lenient-composer-plugin
https://github.com/cweagans/composer-patches
https://www.drupal.org/project/rel_to_abs/issues/3434164
2025-05-29 16:09:07 +01:00
c3965c027f Style local tasks
Based on https://flowbite.com/docs/components/tabs.
2025-05-29 15:41:00 +01:00
f83c587527 Update pre and code colours 2025-05-29 15:41:00 +01:00
ff168f3f14 Update to Tailwind CSS v4 2025-05-29 15:41:00 +01:00
8a760f433f Add theme flake.nix to add tailwindcss 2025-05-29 11:41:07 +01:00
0dbbd96cda Refactor 2025-05-29 10:30:55 +01:00
8024351158 Add daily email 2025-05-28 13:13:51 +01:00
ff19dcd4e8 Remove /tome-test, redirect to front page 2025-05-28 10:06:52 +01:00
5e9c4b46be Add daily email 2025-05-28 10:05:26 +01:00
ac5fbaba7d Re-upload Luke's podcast episode 2025-05-28 00:07:59 +01:00
f9c07cf7e2 Add daily email 2025-05-26 08:59:37 +01:00
429b1670dc Update shortcuts 2025-05-26 08:43:03 +01:00
53202c90d2 Fix published date 2025-05-25 23:49:31 +01:00
c3e81a7811 Add phpactor 2025-05-25 20:42:30 +01:00
bde97b40d8 Add favicon 2025-05-25 20:42:22 +01:00
89527a0d9b Update podcast node styling 2025-05-25 20:35:47 +01:00
d39c431003 Update podcast episodes 2025-05-25 20:25:14 +01:00
fc1beaf3fb Add podcast listing page 2025-05-25 20:25:14 +01:00
203056d54a Add redirect 2025-05-25 10:13:16 +01:00
279f344be6 Add redirect module 2025-05-25 10:11:35 +01:00
219cee9477 Add daily email 2025-05-25 08:55:44 +01:00
59d9fd6de9 Add existing podcast episodes 2025-05-24 17:34:29 +01:00
1ebd0fe6ac Add files directory 2025-05-23 10:50:29 +01:00
ddf2f89fa1 Add podcast episode with Luke McCormick 2025-05-23 10:47:22 +01:00
3450ffd8de Increase upload file size limits 2025-05-23 10:47:22 +01:00
d9f038ffca Add the podcast episode content type 2025-05-23 10:47:07 +01:00
b25b2b5e33 Add markdown_easy module 2025-05-23 08:43:26 +01:00
43725c8644 Add daily email 2025-05-22 00:02:38 +01:00
977e2eb9b6 composer update 2025-05-21 20:19:24 +01:00
30af9d35d2 Add daily email 2025-05-20 00:42:52 +01:00
b3311f7bb8 Add daily email 2025-05-19 23:11:16 +01:00
2fa9b580ea Remove opd_presentations 2025-05-16 21:39:21 +01:00
013e45188c tome export 2025-05-16 21:37:30 +01:00
831f23fe85 tome export 2025-05-16 21:12:56 +01:00
c07c6ed686 Remove space after person's name
If 'Twig development mode' is disabled.
2025-05-16 19:01:06 +01:00
444194a4b8 Add spacing between testimonials 2025-05-16 17:08:51 +01:00
0e4f04a2cb Increase JPEG quality 2025-05-16 10:20:56 +01:00
e121a05f0f Create a testimonial component 2025-05-16 10:20:56 +01:00
a2a4d00aba Add node--testimonial template 2025-05-16 07:55:07 +01:00
a644322ded Change the front page 2025-05-16 07:50:08 +01:00
ae9710a55a tome export 2025-05-16 07:49:05 +01:00
b8c6c17194 Style block titles 2025-05-16 01:17:18 +01:00
d8f11e10eb Add front page with testimonials block 2025-05-16 01:15:01 +01:00
c4eeb0990e Enable Layout Builder for basic pages 2025-05-16 00:46:23 +01:00
cfb98aea2f Create a block of testimonials
Sorted by weight, added using the Weight module.
https://www.drupal.org/project/weight

If two testimonials have the same weight, they are sorted by their
created date.
2025-05-16 00:41:38 +01:00
b8ca93ff2b Start adding testimonials 2025-05-16 00:16:30 +01:00
811ac5d9f2 Update todo.txt 2025-05-14 02:37:18 +01:00
3516269433 tome export 2025-05-14 02:30:09 +01:00
a2d7c0ea4a Delete old remote files 2025-05-14 00:48:09 +01:00
23926b0e36 tome export 2025-05-14 00:36:23 +01:00
c60879691f Ignore recipes 2025-05-14 00:34:53 +01:00
88ec3d9e51 Create and use DailyEmailTestTrait 2025-05-13 23:42:39 +01:00
37e0964b53 Add settings.php 2025-05-13 18:02:37 +01:00
ceb74f618b Add a test to confirm the token substitutes
...correctly
2025-05-12 15:00:54 +01:00
58740872fa Use the count method on the Collection 2025-05-12 08:31:19 +01:00
1013305d38 Return the email nodes, not just the node IDs 2025-05-12 08:19:33 +01:00
7e32227e7d Update todo.txt 2025-05-12 08:07:12 +01:00
b479e15b66 Only count published daily emails 2025-05-12 08:06:22 +01:00
c48f8acd4a Make the email count dynamic based on the number
...of daily email nodes
2025-05-12 01:20:28 +01:00
6ba4b80645 Create a token to count the number of sent daily
...emails
2025-05-12 00:23:28 +01:00
c722387743 Move the opdavies theme, add symlink
As per https://github.com/drupal-tome/tome-project.

> When composer install or update is ran, the "modules" and "themes"
directories, as well as the "settings.php" file, is symlinked into the
"web" directory.
2025-05-11 23:56:07 +01:00
8c61efd39f Fix whitespace 2025-05-11 22:40:24 +01:00
59ed027f74 Update RSS feed 2025-05-11 22:33:00 +01:00
43aea762d6 Add content type description 2025-05-11 22:23:39 +01:00
be50c34673 tome export 2025-05-11 21:13:27 +01:00
88f7641b3b Always generate HTML before uploading 2025-05-11 21:10:06 +01:00
ac3299996f tome export 2025-05-11 21:05:39 +01:00
64ace0ad44 Add daily email 2025-05-11 21:04:08 +01:00
f297d9b385 Move opdavies theme 2025-05-11 20:09:06 +01:00
c02eaa5faf Update todo.txt 2025-05-11 20:09:06 +01:00
58869fa91e Remove the hard-coded footer and menu links 2025-05-11 20:02:15 +01:00
98472ea66b tome export 2025-05-11 20:02:15 +01:00
bf81c9d4a8 Update hostname 2025-05-11 20:02:15 +01:00
47dc790f26 Increase the items per page 2025-05-11 20:02:15 +01:00
b88d802c95 Update the number of emails 2025-05-11 20:02:15 +01:00
f3c35423cf Add Pathauto for daily email nodes 2025-05-11 20:02:14 +01:00
ac1484b1e0 tome export 2025-05-11 20:02:14 +01:00
328502c279 tome export 2025-05-11 20:02:14 +01:00
d689be14f2 Automated dev commit 2025-05-11 20:02:14 +01:00
fb3f325d09 Automated dev commit 2025-05-11 20:02:14 +01:00
84fb3a8bfb Add export recipe 2025-05-11 20:02:14 +01:00
dde5fbf867 tome export 2025-05-11 20:02:14 +01:00
161a79b888 tome export 2025-05-11 20:02:13 +01:00
1edd7ffe2f Add paragraphs module 2025-05-11 20:02:13 +01:00
2c151f8c49 Automated dev commit 2025-05-11 20:02:13 +01:00
c5c3540595 Automated dev commit 2025-05-11 20:02:13 +01:00
76759ffa78 Update todo.txt 2025-05-11 20:02:13 +01:00
5f300fea53 Ignore content in recipes 2025-05-11 20:02:13 +01:00
e83f3e56c9 tome export 2025-05-11 20:02:13 +01:00
d6218b28e8 Switch the feed type from file upload to URL 2025-05-11 20:02:13 +01:00
d4d5a179c7 Update content 2025-05-11 20:02:13 +01:00
a743be105b Add composer test script 2025-05-11 20:02:13 +01:00
42a9a030bd composer update 2025-05-11 20:02:13 +01:00
fc44d99074 Update todo.txt 2025-05-11 20:02:12 +01:00
76a63e781d tome export 2025-05-11 20:02:12 +01:00
60f1805ebf Update todo.txt 2025-05-11 20:02:12 +01:00
500fe827f3 Refactor 2025-05-11 20:02:12 +01:00
445de07abe Refactor 2025-05-11 20:02:12 +01:00
2008ea3400 Create README.md 2025-05-11 20:02:12 +01:00
78953c8e79 Update todo.txt 2025-05-11 20:02:12 +01:00
61680e8e2f Add upload recipe 2025-05-11 20:02:12 +01:00
e998292e94 Rename recipe 2025-05-11 20:02:12 +01:00
313740fba7 Export configuration 2025-05-11 20:02:12 +01:00
e0b9611b74 Reformat and style the "Submitted by" text 2025-05-11 20:02:12 +01:00
1e187ab31d Add prose classes to the email body field 2025-05-11 20:02:12 +01:00
4d8098b924 Add prose classes to the email body field 2025-05-11 20:02:12 +01:00
0a1e733d3f Add daily email registration form 2025-05-11 20:02:12 +01:00
fa4663868e Update todo.txt 2025-05-11 20:02:12 +01:00
705945af29 Daily email archive page and pager templates 2025-05-11 20:02:12 +01:00
f6362bd499 Enable Tome 2025-05-11 20:02:12 +01:00
95cafb65c5 Daily email archive view template
From https://www.drupal.org/docs/develop/theming-drupal/twig-in-drupal/twig-template-naming-conventions:

> Patterns:
>
> - views-view--[viewid]--[view-display-id].html.twig
> - views-view--[viewid]--[view-display-type].html.twig
> - views-view--[view-display-type].html.twig
> - views-view--[viewid].html.twig
> - views-view.html.twig
2025-05-11 20:02:12 +01:00
653dcc5528 Add todo.txt 2025-05-11 20:02:12 +01:00
de1f0c4c23 Page and page title templates 2025-05-11 20:02:12 +01:00
82a1cbe115 Add font files 2025-05-11 20:02:12 +01:00
a81e2c81cc Export block configuration 2025-05-11 20:02:12 +01:00
cd1449ee06 Add tailwind.css
Copied from Sculpin.
2025-05-11 20:02:12 +01:00
a3ace099f7 Add custom theme 2025-05-11 20:02:12 +01:00
3a899bbad8 Add db-backup recipe 2025-05-11 20:02:12 +01:00
c6e2d553f8 Export configuration 2025-05-11 20:02:12 +01:00
3a28895159 Add sqlite
So installing from existing configuration will work.
2025-05-11 20:02:12 +01:00
9703455cca Add the feeds module 2025-05-11 20:02:12 +01:00
bc2ab546d4 Add and enable the drupal_cms_seo_tools recipe
```bash
composer require drupal/drupal_cms_seo_tools
drush recipe $(pwd)/recipes/drupal_cms_seo_tools
```
2025-05-11 20:02:12 +01:00
a4eacb5cf4 Add tome 2025-05-11 20:02:12 +01:00
e6ae3a1655 Add justfile 2025-05-11 20:02:12 +01:00
91cba785f4 Add .tmux-sessionizer 2025-05-11 20:02:12 +01:00
08a4e83117 Add Drush 2025-05-11 20:02:12 +01:00
52ef82cdef Add Drupal 2025-05-11 20:02:12 +01:00
19d6ba7c4c Initial commit 2025-05-11 20:02:12 +01:00
c7cd62fce9 Remove Sculpin files 2025-05-11 20:02:05 +01:00
4211 changed files with 140738 additions and 85068 deletions

17
.editorconfig Normal file
View file

@ -0,0 +1,17 @@
# Drupal editor configuration normalization
# @see http://editorconfig.org/
# This is the top-most .editorconfig file; do not search in parent directories.
root = true
# All files.
[*]
end_of_line = LF
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[composer.{json,lock}]
indent_size = 4

64
.gitattributes vendored Normal file
View file

@ -0,0 +1,64 @@
# Drupal git normalization
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# @see https://www.drupal.org/node/1542048
# Normally these settings would be done with macro attributes for improved
# readability and easier maintenance. However macros can only be defined at the
# repository root directory. Drupal avoids making any assumptions about where it
# is installed.
# Define text file attributes.
# - Treat them as text.
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
# - Detect whitespace errors.
# - Exposed by default in `git diff --color` on the CLI.
# - Validate with `git diff --check`.
# - Deny applying with `git apply --whitespace=error-all`.
# - Fix automatically with `git apply --whitespace=fix`.
*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php
*.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
# PHPStan's baseline uses tabs instead of spaces.
core/.phpstan-baseline.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tabwidth=2 diff=php linguist-language=php
# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.eot -text diff
*.exe -text diff
*.gif -text diff
*.gz -text diff
*.ico -text diff
*.jpeg -text diff
*.jpg -text diff
*.otf -text diff
*.phar -text diff
*.png -text diff
*.svgz -text diff
*.ttf -text diff
*.woff -text diff
*.woff2 -text diff

28
.gitignore vendored
View file

@ -1,21 +1,9 @@
/.phpunit.cache
/.phpunit.result.cache
/output_*/
/.editorconfig
/.gitattributes
/.pre-commit-config.yaml
/drush
/html
/recipes
/vendor/
# Front-end assets.
node_modules
source/build
# ATDC pages
/source/atdc/*
# Direnv
/.direnv/
# Devenv
.devenv*
devenv.local.nix
# Pre-commit
.pre-commit-config.yaml
/web
!/files

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "source/atdc"]
path = source/atdc
url = forgejo@ssh.oliverdavies.uk:opdavies/atdc-pages.git

View file

@ -1 +1,3 @@
*.mp3
/*.mp3
/.git/
/files/

View file

@ -1 +0,0 @@
MD013: false

43
.nvim.lua Normal file
View file

@ -0,0 +1,43 @@
require("conform").setup {
formatters_by_ft = {
lua = { "stylua" },
nix = { "nixfmt" },
},
}
local cmp_nvim_lsp = require("cmp_nvim_lsp")
local capabilities = cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities())
local lspconfig = require("lspconfig")
lspconfig.nixd.setup {
capabilities = capabilities,
settings = {
nixd = {
formatting = {
command = "nix fmt",
};
};
};
}
lspconfig.phpactor.setup({ capabilities = capabilities })
lspconfig.tailwindcss.setup({
capabilities = capabilities,
filetypes = { "html", "javascript", "twig" },
settings = {
init_options = {
userLanguages = {
["html.twig"] = "html",
},
},
},
})
require("lint").linters_by_ft = {
lua = { "luacheck" },
nix = { "nix" },
php = { "phpcs", "phpstan" },
}

View file

@ -3,10 +3,10 @@
PATH="${PATH}:./vendor/bin"
tmux new-window -dn scratch
tmux new-window -dn sculpin
tmux new-window -dn tailwind
tmux new-window -dn server
tmux new-window -dn tailwindcss -c "themes/opdavies"
tmux send-keys -t sculpin "sculpin generate --server --watch" Enter
tmux send-keys -t tailwind "cd assets && tailwindcss --input css/tailwind.css --output ../source/build/tailwind.css --watch" Enter
tmux send-keys -t server "drush runserver" Enter
tmux send-keys -t tailwindcss "tailwindcss --input css/tailwind.css --output build/tailwind.css --watch" Enter
nvim .

View file

@ -1,5 +0,0 @@
---
formatter:
include_document_start: true
retain_line_breaks_single: true
type: basic

View file

@ -1,21 +0,0 @@
# oliverdavies.uk
[My personal website][website], built with [Sculpin][] - a PHP-based static site generator.
It contains pages about my products, services, public speaking and training, as well as my daily email archive, podcast episodes and old blog posts from earlier versions of the website.
## Styling
The styling is done using [Tailwind CSS].
## Hosting
The website is hosted on a 1GB DigitalOcean droplet alongside other static websites.
I'm using Apache as my web server so I can easily manage redirects using the `.htaccess` file within the `source` directory..
As it's a static website, no PHP or database are needed.
[sculpin]: https://sculpin.io
[tailwind css]: https://tailwindcss.com
[website]: https://www.oliverdavies.uk

View file

@ -1,14 +0,0 @@
<?php
use Opdavies\Sculpin\Bundle\TwigMarkdownBundle\SculpinTwigMarkdownBundle;
use Sculpin\Bundle\SculpinBundle\HttpKernel\AbstractKernel;
class SculpinKernel extends AbstractKernel
{
protected function getAdditionalSculpinBundles(): array
{
return [
SculpinTwigMarkdownBundle::class,
];
}
}

View file

@ -1,20 +0,0 @@
---
sculpin_content_types:
daily_emails:
permalink: /daily/:year/:month/:day/:basename/
pages:
permalink: /:basename/
podcast_episodes:
permalink: /podcast/:basename/
posts:
permalink: /blog/:basename/
presentations:
permalink: /presentations/:basename/
services:
App\Experience\TwigExtension\ExperienceTwigExtension:
tags:
- {name: twig.extension}
App\Presentation\TwigExtension\PresentationTwigExtension:
tags:
- {name: twig.extension}

View file

@ -1,351 +0,0 @@
---
name: Oliver Davies
slogan: Certified Drupal expert, Developer and Consultant
email: oliver+website@oliverdavies.uk
url: http://localhost:8000
assets:
url: '%url%'
version: 6
banner_text: ~
code:
url: https://code.oliverdavies.uk
username: opdavies
ctas:
call: |
Are you still using Drupal 7 and dont know whats involved to upgrade to Drupal 10? <a href="%site.url%/call">Book a Drupal 7 upgrade consultation call</a> or <a href="%site.url%/drupal-upgrade">an upgrade roadmap</a>.
d7eol: |
Are you stuck on Drupal 7? <a href="%site.url%/drupal-upgrade">Plan your upgrade to Drupal 10 now!</a>
module: |
If you're creating a new Drupal module, try my <a href="https://github.com/opdavies/drupal-module-template">free Drupal module template</a>.
sponsor: |
Do you want to contribute more to open source but don't have the time? <a href="%site.url%/sponsor">Sponsor me to do it for you</a>!
subscription: |
Do you need immediate access to an expert Drupal Developer? With my <a href="%site.url%/subscription">Drupal development subscription</a>, make unlimited requests for a fixed monthly price in less time than posting to a job board!
testing_course: |
Do you want to learn about automated testing in Drupal? Take my <a href="%site.url%/atdc">free 10-day email course</a> and get daily lessons straight to your inbox.
pair: |
Need help or want another pair of eyes on your code? Book a <a href="%site.url%/call">1-on-1 consulting call</a> or an <a href="%site.url%/pair">online pair programming session</a> with a 100% money-back guarantee.,
drupalorg:
url: https://www.drupal.org/u/%drupalorg.username%
username: opdavies
features:
new_css: true
github:
url: https://github.com/%github.username%
username: opdavies
mastodon:
username: opdavies
url: https://mastodon.social/@%mastodon.username%
menu_links:
- title: Home
url: /
- title: Press Info
url: /press
- title: Services
url: /pricing
- title: Presentations
url: /presentations
- title: Podcast
url: /podcast
attributes:
title: The Beyond Blocks Podcast
- title: Daily list
url: /daily
attributes:
title: The Daily Drupaler Email List
- title: Sponsor me
url: /sponsor
- title: Contact
url: 'mailto:%email%'
attributes:
title: Contact Oliver
meta:
description: |-
Oliver is an Acquia-certified Triple Drupal expert, core contributor, Developer, Consultant and multiple-time DrupalCon speaker.
testimonials:
- text: |
This course is really great and I've recommended it to my coworkers here at Palantir.net.
name: Daniel Davis-Boxleitner
title: Senior Engineer at Palantir.net
image:
url: /assets/images/recommendations/daniel-davis-boxleitner.jpg
tags: [testing, atdc]
- text: |
The course was very informative. One of the biggest pain points with Drupal testing was that there was no clear and definitive guide on setting up the php unit XML file to get functional and kernel tests working right away. Your guide was fantastic and I will definitely be using it going forward in my module development for work.
name: Frank Landry
title: ~
image:
url: /assets/images/recommendations/frank-landry.jpg
tags: [testing, atdc]
- text: |
Well done. You've created a really excellent resource here that has the potential to bring Drupal development forward a huge leap. Youve managed to simplify and share some often complex seeming issues.
name: Adam Nuttall
title: Drupal Engineer
image:
url: /assets/images/recommendations/adam-nuttall.jpg
tags: [testing, atdc]
- text: |
I'm liking your short emails. They're just the right length that isn't too distracting but I'm able to consume it in a single glance.
name: Kevin Coyle
title: Design System Engineering Consultant
url: https://www.coyledesign.co.uk
image:
url: /assets/images/recommendations/kevin-coyle.jpg
tags: [daily]
- text: |
I really love your daily posts. They are opinionated, and this gives room for thoughts, I appreciate this.
name: Boris Böhne
title: Drupal Developer
url: https://www.drupal.org/u/drubb
image:
url: /assets/images/recommendations/boris-bohne.jpg
tags: [daily]
- text: |
Following your "Automated tests" emails and they are great! Such a pleasant reading. I love how you start from the very beginning and keeping things simple, step by step.
Looking forward to more content!
name: Matthieu Scarset
title: Drupal Expert
url: https://matthieuscarset.com
image:
url: /assets/images/recommendations/matthieu-scarset.jpg
tags: [testing, atdc]
- text: |
Hi Oliver, we met briefly at the Tech Connect event in London last month. Been reading through a few of your latest posts and have found the messages valuable, especially as we spent the week learning about unit, integration and e2e testing. I have signed up to your mailing list to keep the good advice flowing!
name: Alexander Carr
title: Full Stack Software Engineer at School of Code
image:
url: /assets/images/recommendations/alexander-carr.jpg
tags: [daily]
- text: |
These emails are superb and make for very interesting reading. Thank you!
name: Adam Nuttall
title: Drupal Engineer
image:
url: /assets/images/recommendations/adam-nuttall.jpg
tags: [daily]
- text: Oliver's approach to testing is a continual reminder of his commitment to delivering high-quality, bug-free, software.
name: Mike Karthauser
title: Senior Software Engineer
image:
url: /assets/images/recommendations/mike-karthauser.jpg
tags: [daily, testing, coaching, atdc]
- text: |
I had the opportunity and good fortune to work with Oliver solving two problems that I was having on a Drupal Commerce site. I have done several Drupal sites using UberCart, but since it is deprecated, I chose to use Commerce. I had searched, posted to forums, and other normal means to find answers to my problems, to no response and to no avail.
I got a referral to Oliver and scheduled an appointment to discuss the problems on a Zoom call. After showing him via screen share where I was stumped, he offered different approaches to what I was doing, which I was fine with as long as it worked.
Once we solved the first problem, I was really elated and then focused on the second one, which was an easier fix. So in a short period of time, both problems were fixed and tested.
I found Oliver was affable and easy to work with. He has a strong work ethic and a desire to solve problems for his customers and can recommend working with him. I think one of his strengths is to find alternative solutions to problems.
name: Tom Evans
title: ~
image: ~
tags: [call]
- text: |
I am a big fan of your git approaches. I especially remember pairing with you and watching how many commands you run to solve many problems and how fast you were. It's a skill I believe not many have, particularly those who are used to working with a GUI like me, and personally I think it is quite valuable.
name: Marcos Duran
title: Senior Software Engineer
image:
url: /assets/images/recommendations/marcos-duran.jpg
tags: [git, daily, coaching]
- text: |
I like the "$ git log -S" and "$ git log --grep" commands, will definitely be using these, thanks!
name: Stephen Mulvihill
title: Solutions Architect
image:
url: /assets/images/recommendations/stephen-mulvihill.jpg
tags: [git, daily, coaching]
- text: |
Just wanted to say that your blog is amazing <3 I absolutely love it and usually share it with colleagues and some of the kids at my Code Club.
Thanks for contributing to the community with your amazing content!
name: Patty O'Callaghan
title: Tech Lead
url: https://pattyocallaghan.com
image:
url: /assets/images/recommendations/patty-ocallaghan.jpg
tags: [daily]
- text: |
I've wanted to explore testing for a while, but as a PHP developer with 10 years of Drupal experience who'd written next to no tests, I really needed guidance. Oliver's expertise in testing and TDD motivated me to seek his help.
Before our call, I'd started writing tests for my modules but needed direction, understanding the code to a degree but needing help with approach. Oliver clarified both unit and integration testing, providing solutions for my challenges, and shared his code for inspiration and help. He also gave me ideas on how to utilise contrib code to help me further.
Consulting with an expert, I gained the clarity and confidence I needed in tackling testing with structured, maintainable practices. Oliver's adaptability and tailored services make him highly recommendable.
Thanks, Oliver - I feel empowered and know exactly what approach to take now!
name: Tawny Bartlett
title: Senior Drupal Developer
url: https://www.playingwithpixels.co.uk
image:
url: /assets/images/recommendations/tawny.jpg
tags: [testing, coaching, call, atdc]
- text: |
I've worked with Oliver for a number of years on B2C and B2B web projects and he has always demonstrated himself to be an expert in his field.
As an insurance provider, some of our products and services don't naturally fit within a traditional ecommerce journey - but Oliver has always been able to come up with innovative ways to leverage core Drupal functionality and develop custom modules to meet our needs.
Friendly, flexible and diligent - I wouldn't hesitate to recommend Oliver to anyone looking for a Drupal developer to progress their next project.
name: Joe Howell
title: Director, Bastion Insurance
url: https://www.bastioninsurance.co.uk
image:
url: /assets/images/recommendations/joe-howell.jpg
tags: [front, subscription, coaching]
- text: |
We use Oliver for maintaining a couple of Drupal sites for which we no longer have the skills ourselves. We became aware of Oliver through his work in the Drupal community, and about a year ago we approached him to help us with the deep dive aspects of maintaining and developing Drupal sites. He's been really helpful and very responsive. Much appreciated!
name: Jon Hallett
title: Senior Systems Administrator at the University of Bristol
url: https://bristol.ac.uk
image:
url: /assets/images/recommendations/jon-hallett.jpeg
tags: [front, subscription]
- text: |
For over a decade we have worked with Oliver on a number of different projects. Initially our collaboration consisted of web maintenance and troubleshooting but we soon tapped Oliver to design, build and maintain a custom awards site which includes both submission and judging functionality. Oliver has deep and wide-ranging skills and I would certainly recommend his services!
name: Michael Itkoff
title: Cofounder
url: https://www.daylightbooks.org
image:
url: /assets/images/recommendations/michael-itkoff.jpg
tags: [front, subscription]
- text: |
Working with Oliver on the Seren website has been easy and beneficial.
As well as providing general maintenance support, he built a new Drupal module which integrated with our partners Glassboxx so that we could sell ebooks directly from our website. Oliver worked closely with the team at Glassboxx to create the integration which needed to communicate with the Glassboxx app so that users could download their purchases. He was able to resolve issues which came up along the way in order to create a functioning module which we now use on our site.
Oliver has extensive knowledge of Drupal and his familiarity with the Seren site meant he was able to fix problems quickly and efficiently as they arose.
He is reliable and has always been willing to discuss new ideas for how the site could function.
We would recommend working with him for his invaluable knowledge and ability to find solutions to problems at short notice. It has been a pleasure to work with him over the years.
name: Mick Felton
title: Publisher at Poetry Wales Press Ltd (Seren Books)
url: https://www.serenbooks.com
image:
url: /assets/images/recommendations/mick-felton.jpg
tags: [front, subscription, coaching]
- text: |
Oliver is a pleasure to work with, and I would engage him again without hesitation. He communicates regularly, ensures that he meets requirements, and suggests improvements to the potential solutions to the brief.
name: Duncan Davidson
title: Director at Rohallion
url: https://rohallion.agency
image:
url: /assets/images/recommendations/duncan.jpeg
tags: [front, subscription, coaching]
- text: |
We have only worked together for a short while but I can see Oliver is a Drupal expert.
His technical knowledge means we have been able to make improvements to the sites we manage quickly and efficiently.
If we have complex issues to contend with in the future I feel confident he will be able to deal with them.
name: Anonymous
title: Marketing Strategist
tags: [front, subscription]
- text: |
A fantastic and highly knowledgeable Drupal Developer. Oliver saved a struggling Drupal project with his wealth of Drupal experience.
name: Adam Cuddihy
title: Web Development Manager
url: ~
image:
url: /assets/images/recommendations/adam.jpeg
tags: [front, subscription]
- text: |
I had the pleasure of working with Oliver whilst building the first version of our drupal based intranet. His knowledge of Drupal and the wider infrastructure required to run a site was really invaluable.
At the time, we were very new to Drupal, so it gave us a great platform to learn from and expand our own knowledge.
He's the only external contractor that we've kept in touch with over the years, which goes to show how much we valued his input.
name: Huw Davies
title: Web Dev Manager / DevOps / Team Manager at Admiral Group Plc
url: https://admiral.com
image:
url: /assets/images/recommendations/huw.jpeg
tags: [front, subscription]
- text: |
Oliver really knows his stuff. Whether you are just starting out or looking to take your knowledge to the next level, his patient and clear way of explaining will help get you there.
name: Scott Euser
title: Head of Web Development
url: ~
image:
url: /assets/images/recommendations/scott-euser.jpg
tags: [testing, coaching]
- text: |
I have had the pleasure of working with Oliver on several projects at Microserve. He is a natural innovator and a great mentor who inspires others to explore new technologies and approaches. He is a highly knowledgeable professional with a passion for all things Drupal and the tenacity required to get the job done well.
name: Alan Hatch
title: Senior Drupal Developer at Microserve
url: ~
image:
url: /assets/images/recommendations/alan.jpeg
tags: [coaching]
- text: |
Oliver has been an outstanding contributor to the Drupal Association team. He is a talented developer who writes great code and applies his curiosity and love of learning to every project. He is also a fantastic team member, who gives to the team as much as he gets.
Oliver is the embodiment of everything good about the Drupal community.
name: Holly Ross
title: Executive Director at the Drupal Association
url: https://www.drupal.org/association
image:
url: /assets/images/recommendations/holly-ross.png
tags: [front, subscription]
- text: |
Oliver is a skilled Drupal developer with a passion for the Drupal community. As his direct supervisor, I was able to watch Oliver grow with the Drupal Association and contribute an amazing amount of effort and integrity to all of his work.
Everything we have thrown at Oliver, he has approached with an open and flexible mind that has allowed him to work on a wide range of projects and features for Drupal products.
name: Josh Mitchell
title: CTO at Drupal Association
url: https://joshuami.com
image:
url: /assets/images/recommendations/josh-mitchell.png
tags: [front, subscription]
- text: |
Oliver was great to work with. He has expert knowledge with Drupal and delivered exactly what we were looking for on time. He's understanding, friendly and easy to get along with. I would enjoy working with him again in the future.
name: Brian Hartwell
title: Interactive Creative Director
url: ~
image: ~
tags: [front, subscription]
- text: |
Oliver was fantastic to work with - pro-active and highly responsive, he worked well remotely and as part of a project team. His understanding of the project requirement(s) and ability to translate it into working code was essential and he delivered.
name: Brian Healy
title: Director of Business Development at Tincan
url: ~
image:
url: /assets/images/recommendations/brian-healy.png
tags: [front, subscription]
- text: |
Oliver is an amazing colleague, he's professional, full of knowledge and I could not recommend him more.
name: Chris Jarvis
title: Developer at Microserve
url: ~
image:
url: /assets/images/recommendations/chris-jarvis.jpg
- text: |
Oliver is seasoned Drupal and all round highly skilled and experienced web developer. I have worked with Oliver on an important project where he was reliable, prompt and ensured strict client deadline delivery and confidentiality at all times.
name: Daniel Easterbrook
title: Digital Strategy Consultant
tags: [front, subscription]
prose_classes: |
prose prose-p:text-black prose-a:font-light prose-a:text-blue-primary prose-p:text-lg prose-blockquote:border-blue-primary dark:marker:text-white prose-li:my-1 prose-li:text-lg prose-figcaption:text-white prose-li:text-black marker:text-black dark:prose-p:text-white dark:prose-invert dark:prose-a:text-blue-400 dark:prose-blockquote:border-blue-400 dark:prose-li:text-white hover:prose-a:no-underline prose-h2:text-xl prose-code:font-normal prose-h2:mb-4 prose-ul:my-3 dark:prose-hr:border-grey-400 prose-code:before:content-[''] prose-code:after:content-['']
transistor:
feed:
url: https://feeds.transistor.fm/beyond-blocks
share:
url: https://share.transistor.fm/e
youtube:
channel:
slug: opdavies
url: https://www.youtube.com/@%youtube.channel.slug%

View file

@ -1,8 +0,0 @@
---
imports:
- sculpin_site.yml
features:
new_css: false
url: https://www.oliverdavies.uk

View file

@ -1,11 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
@font-face {
font-family: Roboto Condensed;
font-weight: 300 400 500 700;
src: url('../assets/fonts/RobotoCondensed-VariableFont_wght.ttf') format('truetype');
}
}

View file

@ -1,28 +1,147 @@
{
"require": {
"opdavies/sculpin-twig-markdown-bundle": "^0.2.0",
"sculpin/sculpin": "^3.2"
"name": "drupal/recommended-project",
"description": "Project template for Drupal projects with a relocated document root",
"type": "project",
"license": "GPL-2.0-or-later",
"homepage": "https://www.drupal.org/project/drupal",
"support": {
"docs": "https://www.drupal.org/docs/user_guide/en/index.html",
"chat": "https://www.drupal.org/node/314178"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"composer/installers": "^2.3",
"cweagans/composer-patches": "^1.7",
"drupal/auto_entitylabel": "^3.4",
"drupal/bpmn_io": "^2.0.6",
"drupal/coffee": "^2",
"drupal/core": "^10.4 || ^11",
"drupal/core-composer-scaffold": "^11.1",
"drupal/core-recipe-unpack": "^11.2",
"drupal/core-recommended": "^11.1",
"drupal/dashboard": "^2",
"drupal/eca": "^2.1.4",
"drupal/field_group": "^3.6",
"drupal/focal_point": "^2.1",
"drupal/gin": "^4.0.6 || ^5",
"drupal/markdown_easy": "^1.0",
"drupal/metatag": "^2",
"drupal/paragraphs": "^1.19",
"drupal/pathauto": "^1.13",
"drupal/podcast": "^1.10",
"drupal/redirect": "^1.11",
"drupal/rel_to_abs": "^2.2",
"drupal/robotstxt": "^1.6",
"drupal/sam": "^1.2",
"drupal/seo_checklist": "^5.2.1",
"drupal/simple_sitemap": "^4.2.2",
"drupal/sitemap": "^2",
"drupal/tagify": "^1.2",
"drupal/token_or": "^2.2",
"drupal/tome": "^1.13",
"drupal/twig_tweak": "^3.4",
"drupal/weight": "^3.6",
"drupal/yoast_seo": "^2.1",
"drush/drush": "^13.5",
"mglaman/composer-drupal-lenient": "^1.0"
},
"conflict": {
"drupal/drupal": "*"
},
"minimum-stability": "stable",
"prefer-stable": true,
"config": {
"allow-plugins": {
"sculpin/sculpin-theme-composer-plugin": true,
"phpstan/extension-installer": true
"composer/installers": true,
"cweagans/composer-patches": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"drupal/core-composer-scaffold": true,
"drupal/core-recipe-unpack": true,
"mglaman/composer-drupal-lenient": true,
"php-http/discovery": true,
"phpstan/extension-installer": true,
"tbachert/spi": true
},
"sort-packages": true
},
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
}
},
"installer-paths": {
"web/core": [
"type:drupal-core"
],
"web/libraries/{$name}": [
"type:drupal-library"
],
"web/modules/contrib/{$name}": [
"type:drupal-module"
],
"web/profiles/contrib/{$name}": [
"type:drupal-profile"
],
"web/themes/contrib/{$name}": [
"type:drupal-theme"
],
"drush/Commands/contrib/{$name}": [
"type:drupal-drush"
],
"web/modules/custom/{$name}": [
"type:drupal-custom-module"
],
"web/profiles/custom/{$name}": [
"type:drupal-custom-profile"
],
"web/themes/custom/{$name}": [
"type:drupal-custom-theme"
],
"recipes/{$name}": [
"type:drupal-recipe"
]
},
"drupal-lenient": {
"allowed-list": ["drupal/rel_to_abs"]
},
"patches": {
"drupal/rel_to_abs": {
"Automated Drupal 11 compatibility fixes for rel_to_abs": "https://www.drupal.org/files/issues/2024-03-24/rel_to_abs.2.2.5.rector.patch"
}
}
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
"scripts": {
"export": "drush tome:export --yes",
"import": "drush tome:import",
"generate": "drush tome:static --uri https://www.oliverdavies.uk",
"post-install-cmd": [
"@symlink"
],
"post-update-cmd": [
"@symlink"
],
"symlink": "./tools/scripts/symlink.sh",
"test": [
"composer validate --strict",
"phpstan analyze",
"phpunit --testdox"
]
},
"require-dev": {
"drupal/core-dev": "^11.1",
"phpat/phpat": "^0.10.20",
"phpstan/extension-installer": "^1.4",
"weitzman/drupal-test-traits": "^2.5"
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
"Tools\\": "tools/"
}
},
"require-dev": {
"phpunit/phpunit": "^12.1",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-strict-rules": "^2.0",
"phpstan/extension-installer": "^1.4"
}
}

14143
composer.lock generated

File diff suppressed because it is too large Load diff

24
config/sync/.htaccess Normal file
View file

@ -0,0 +1,24 @@
# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
Deny from all
</IfModule>
# Turn off all options we don't need.
Options -Indexes -ExecCGI -Includes -MultiViews
# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
# Override the handler again if we're run later in the evaluation list.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>
# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php.c>
php_flag engine off
</IfModule>

View file

@ -0,0 +1,5 @@
_core:
default_config_hash: 0G5pZBcxbg8ONYzNLd1RJIsvuFFewm9htnS4I-ABKJ8
max_age: 86400
cron_interval: 21600
limit: 10

View file

@ -0,0 +1,10 @@
status: 1
pattern: '[node:field_topic] with [opd-podcast:guest-names]'
escape: false
preserve_titles: false
save: true
chunk: 50
dependencies:
config:
- node.type.podcast_episode
new_content_behavior: 0

View file

@ -0,0 +1,3 @@
_core:
default_config_hash: fUksROt4FfkAU9BV4hV2XvhTBSS2nTNrZS4U7S-tKrs
interval: 10800

View file

@ -0,0 +1,22 @@
uuid: f33c9603-b126-4b0d-b393-4aed1982afed
langcode: en
status: true
dependencies:
module:
- system
theme:
- claro
_core:
default_config_hash: NjcxOBrPOiK5-38t56DwFBDVY4yer7YSlbRWXFuHe7A
id: claro_breadcrumbs
theme: claro
region: breadcrumb
weight: 0
provider: null
plugin: system_breadcrumb_block
settings:
id: system_breadcrumb_block
label: Breadcrumbs
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 45e7f781-3819-4f7f-bf4a-8a5384bede34
langcode: en
status: true
dependencies:
module:
- system
theme:
- claro
_core:
default_config_hash: a0Yyx1GeyKarZ4T_yXQBR_ZFKnXiFLtxAb6gWLd8nr0
id: claro_content
theme: claro
region: content
weight: 0
provider: null
plugin: system_main_block
settings:
id: system_main_block
label: 'Main page content'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 9f10450d-ff77-41fc-9166-c77c62eda335
langcode: en
status: true
dependencies:
module:
- help
theme:
- claro
_core:
default_config_hash: jccFSSVqV0WCDb6NtML1VWAWTtDbZ-zn5YgTRMgMrIM
id: claro_help
theme: claro
region: help
weight: 0
provider: null
plugin: help_block
settings:
id: help_block
label: Help
label_display: '0'
provider: help
visibility: { }

View file

@ -0,0 +1,32 @@
uuid: b4124fd4-6739-424e-b96d-3748cc47675f
langcode: en
status: true
dependencies:
module:
- search
- system
theme:
- claro
enforced:
config:
- search.page.help_search
_core:
default_config_hash: 2ToeZLvlHKTeFY74gpgu1PejLoFyCECLO_gw6rAZwqw
id: claro_help_search
theme: claro
region: help
weight: -4
provider: null
plugin: search_form_block
settings:
id: search_form_block
label: 'Search help'
label_display: visible
provider: search
page_id: help_search
visibility:
request_path:
id: request_path
negate: false
context_mapping: { }
pages: /admin/help

View file

@ -0,0 +1,20 @@
uuid: 557f3e9f-95b2-4ecf-ad25-0330e0786f8d
langcode: en
status: true
dependencies:
theme:
- claro
_core:
default_config_hash: CdXfDmRgAvms7EQovxxWPdYi0GitxeRbVtScYK16ZH0
id: claro_local_actions
theme: claro
region: content
weight: -10
provider: null
plugin: local_actions_block
settings:
id: local_actions_block
label: 'Primary admin actions'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 2d0aa6ef-e0de-44b0-b474-5f5510953184
langcode: en
status: true
dependencies:
module:
- system
theme:
- claro
_core:
default_config_hash: '-Ac3ISpIT0PQ-whzD7_dw0SdKi6dAbRFNWdSjOiVDqg'
id: claro_messages
theme: claro
region: highlighted
weight: 0
provider: null
plugin: system_messages_block
settings:
id: system_messages_block
label: 'Status messages'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,20 @@
uuid: 33d29028-f85c-4011-857e-19fd24d81231
langcode: en
status: true
dependencies:
theme:
- claro
_core:
default_config_hash: fNwDdW063tk_ktzSWzZVeQS9wzvLooVO280BQ9WrsIs
id: claro_page_title
theme: claro
region: header
weight: -30
provider: null
plugin: page_title_block
settings:
id: page_title_block
label: 'Page title'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 0225e9a4-bf40-4df6-aafc-4417a4b81a81
langcode: en
status: true
dependencies:
theme:
- claro
_core:
default_config_hash: ACjBZI5shAMiiUpsz-inLYVXDqNNXRnSzAWV3kV_8Hw
id: claro_primary_local_tasks
theme: claro
region: header
weight: 0
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Primary tabs'
label_display: '0'
provider: core
primary: true
secondary: false
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 888318da-55e2-4447-abb6-c08ceee9f03d
langcode: en
status: true
dependencies:
theme:
- claro
_core:
default_config_hash: 2L0geP-ixCbCkEpW6BVF6H7vDUZN4ea07_Y9CociQm4
id: claro_secondary_local_tasks
theme: claro
region: pre_content
weight: 0
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Secondary tabs'
label_display: '0'
provider: core
primary: false
secondary: true
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: f615a68c-fdb9-40ab-bc79-f70c2a715eb3
langcode: en
status: true
dependencies:
module:
- system
theme:
- gin
_core:
default_config_hash: y9X3xgCsO59pQyzNLzY1D3SDJJxCHILLWkpPnmuTJ2E
id: gin_breadcrumbs
theme: gin
region: breadcrumb
weight: 0
provider: null
plugin: system_breadcrumb_block
settings:
id: system_breadcrumb_block
label: Breadcrumbs
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: fbac89f2-160b-436c-99e6-48e2af3fa444
langcode: en
status: true
dependencies:
module:
- system
theme:
- gin
_core:
default_config_hash: erQSEZF2XUjNmgTl0uNRBzmg18ZGXwUcw2FhApoeuHk
id: gin_content
theme: gin
region: content
weight: -4
provider: null
plugin: system_main_block
settings:
id: system_main_block
label: 'Main page content'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,20 @@
uuid: 19f0e955-fc87-41af-8397-4eca8c33fd04
langcode: en
status: true
dependencies:
theme:
- gin
_core:
default_config_hash: OQ9aJ-4qVwK1x00o9EOYK4eFDjQr_HLpbPiJaPSVZiQ
id: gin_local_actions
theme: gin
region: content
weight: -10
provider: null
plugin: local_actions_block
settings:
id: local_actions_block
label: 'Primary admin actions'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 10de17a1-3c2c-4ef9-8f7d-57062553d495
langcode: en
status: true
dependencies:
module:
- system
theme:
- gin
_core:
default_config_hash: BZ5tpW7H8X4PVGRm3MImTIHd2tN0eF7zOtp4SpRYUA0
id: gin_messages
theme: gin
region: highlighted
weight: -5
provider: null
plugin: system_messages_block
settings:
id: system_messages_block
label: 'Status messages'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,20 @@
uuid: 19321262-00d6-479a-81e4-2711a28a4737
langcode: en
status: true
dependencies:
theme:
- gin
_core:
default_config_hash: 6aOgWsNTXjqrDm98TXSAjP6qd2nCijD1xw45MrnbK-Y
id: gin_page_title
theme: gin
region: content
weight: -5
provider: null
plugin: page_title_block
settings:
id: page_title_block
label: 'Page title'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: f27b72ab-8a29-45a8-b39e-4bdeb49d73b5
langcode: en
status: true
dependencies:
theme:
- gin
_core:
default_config_hash: nGE3EoPQQaQCuqTUtZgw0-KIzmrqdKDzdNQf2JyPUt4
id: gin_primary_local_tasks
theme: gin
region: highlighted
weight: -4
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Primary tabs'
label_display: '0'
provider: core
primary: true
secondary: false
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: fa87b341-c9b2-4beb-81f3-5786ba3d7dc5
langcode: en
status: true
dependencies:
theme:
- gin
_core:
default_config_hash: ydSxdq7R66I8UMC460rOzlfzvlUL4VRbdwc6z9DWaUI
id: gin_secondary_local_tasks
theme: gin
region: highlighted
weight: -2
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Secondary tabs'
label_display: '0'
provider: core
primary: false
secondary: true
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: e331eb13-5e3c-498e-a25d-a7a6f5dd6f1b
langcode: en
status: true
dependencies:
module:
- system
theme:
- opdavies
_core:
default_config_hash: erQSEZF2XUjNmgTl0uNRBzmg18ZGXwUcw2FhApoeuHk
id: opdavies_content
theme: opdavies
region: content
weight: -4
provider: null
plugin: system_main_block
settings:
id: system_main_block
label: 'Main page content'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,25 @@
uuid: 99c8b757-57b6-4c44-81ac-46063b0bacac
langcode: en
status: true
dependencies:
config:
- system.menu.main
module:
- system
theme:
- opdavies
id: opdavies_mainnavigation
theme: opdavies
region: footer
weight: 0
provider: null
plugin: 'system_menu_block:main'
settings:
id: 'system_menu_block:main'
label: 'Main navigation'
label_display: '0'
provider: system
level: 1
depth: 0
expand_all_items: false
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: dc18abda-479d-48fd-aab8-9527f4bf7b6b
langcode: en
status: true
dependencies:
module:
- system
theme:
- opdavies
_core:
default_config_hash: BZ5tpW7H8X4PVGRm3MImTIHd2tN0eF7zOtp4SpRYUA0
id: opdavies_messages
theme: opdavies
region: highlighted
weight: -5
provider: null
plugin: system_messages_block
settings:
id: system_messages_block
label: 'Status messages'
label_display: '0'
provider: system
visibility: { }

View file

@ -0,0 +1,20 @@
uuid: 006f6848-b783-4fe2-99d2-14c1c2cf5a48
langcode: en
status: true
dependencies:
theme:
- opdavies
_core:
default_config_hash: 6aOgWsNTXjqrDm98TXSAjP6qd2nCijD1xw45MrnbK-Y
id: opdavies_page_title
theme: opdavies
region: content
weight: -5
provider: null
plugin: page_title_block
settings:
id: page_title_block
label: 'Page title'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,20 @@
uuid: c7aad9c5-effd-4d91-8407-f1a284f40023
langcode: en
status: true
dependencies:
theme:
- opdavies
_core:
default_config_hash: Q9_2whdOj1YIomfvsIfopROW4FT_X5pY0DjdOiOaQ5U
id: opdavies_primary_admin_actions
theme: opdavies
region: highlighted
weight: -5
provider: null
plugin: local_actions_block
settings:
id: local_actions_block
label: 'Primary admin actions'
label_display: '0'
provider: core
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: 90c299c7-fe36-4c33-be1e-bf4cc7bac500
langcode: en
status: true
dependencies:
theme:
- opdavies
_core:
default_config_hash: nGE3EoPQQaQCuqTUtZgw0-KIzmrqdKDzdNQf2JyPUt4
id: opdavies_primary_local_tasks
theme: opdavies
region: highlighted
weight: -4
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Primary tabs'
label_display: '0'
provider: core
primary: true
secondary: false
visibility: { }

View file

@ -0,0 +1,22 @@
uuid: c98156cb-27a4-4be4-8e73-78610a383330
langcode: en
status: true
dependencies:
theme:
- opdavies
_core:
default_config_hash: ydSxdq7R66I8UMC460rOzlfzvlUL4VRbdwc6z9DWaUI
id: opdavies_secondary_local_tasks
theme: opdavies
region: highlighted
weight: -2
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: 'Secondary tabs'
label_display: '0'
provider: core
primary: false
secondary: true
visibility: { }

View file

@ -0,0 +1,10 @@
uuid: 2646e684-c917-4dd0-b502-1a73b9c10131
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: pQP5iQy4SdhAMVcjDUncCfkJmTofnHVtXrsMzx4k6Yk
id: basic
label: 'Basic block'
revision: false
description: 'A basic block contains a title and a body.'

View file

@ -0,0 +1,3 @@
third_party_settings:
shortcut:
module_link: true

View file

@ -0,0 +1,3 @@
coffee_menus:
admin: admin
max_results: 7

View file

@ -0,0 +1,3 @@
_core:
default_config_hash: YNUW2Ij5uE7a4oaXp3i_2lvaFdYM1zNKPPfnEjB0jEc
log_ip_addresses: false

View file

@ -0,0 +1,10 @@
uuid: 7d683aeb-fc1a-48fd-8104-48c03dabd9b1
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: bqZsN31T2n0UjcbyCpOPi9D2iO0sAOHR7FnEs9qMvaA
id: comment
label: 'Default comments'
target_entity_type_id: node
description: 'Allows commenting on content'

View file

@ -0,0 +1,14 @@
uuid: af7d7cf1-4eb6-42b1-9a17-c99f6b9a76f6
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: vymHlgJy26BuI5GGj9-IXjwR3dRC5C0tij4BpWJnoqw
id: feedback
label: 'Website feedback'
recipients:
- admin@example.com
reply: ''
weight: 0
message: 'Your message has been sent.'
redirect: ''

View file

@ -0,0 +1,13 @@
uuid: 996094c6-a0b8-4130-8858-6dfd556c2c9e
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: jonvgt3CkUM2eMLTFwWfHileWWDC4YtXCuIlCahTk_I
id: personal
label: 'Personal contact form'
recipients: { }
reply: ''
weight: 0
message: 'Your message has been sent.'
redirect: ''

View file

@ -0,0 +1,7 @@
_core:
default_config_hash: U69DBeuvXuNVOC15rVNaBjDPK2fWFbo9v4takdYSSO8
default_form: feedback
flood:
limit: 5
interval: 3600
user_default_enabled: true

View file

@ -0,0 +1,22 @@
uuid: 5ec4728f-20c6-4a8c-aa84-a8fc79667a66
langcode: en
status: true
dependencies:
config:
- node.type.daily_email
id: node.daily_email.promote
field_name: promote
entity_type: node
bundle: daily_email
label: 'Promoted to front page'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,22 @@
uuid: 125295f6-32ba-473d-a114-64b2f30a74a2
langcode: en
status: true
dependencies:
config:
- node.type.daily_email_cta
id: node.daily_email_cta.promote
field_name: promote
entity_type: node
bundle: daily_email_cta
label: 'Promoted to front page'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,24 @@
uuid: b65dbe93-851c-4315-b74b-03130d12f796
langcode: en
status: true
dependencies:
config:
- node.type.page
_core:
default_config_hash: fPUEnm4T5zfZRr3ttDUqq7yCDd2uW3clWD-pvos4tlQ
id: node.page.promote
field_name: promote
entity_type: node
bundle: page
label: 'Promoted to front page'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,22 @@
uuid: da2b4a0c-5fc1-4003-9a41-e6e598e3e2bf
langcode: en
status: true
dependencies:
config:
- node.type.podcast_episode
id: node.podcast_episode.promote
field_name: promote
entity_type: node
bundle: podcast_episode
label: 'Promoted to front page'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,22 @@
uuid: 51817376-775f-47f8-8b17-12f115480252
langcode: en
status: true
dependencies:
config:
- node.type.presentation
id: node.presentation.promote
field_name: promote
entity_type: node
bundle: presentation
label: 'Promoted to front page'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,22 @@
uuid: 592e2538-47ff-4ab9-a213-d0657f975bae
langcode: en
status: true
dependencies:
config:
- node.type.testimonial
id: node.testimonial.promote
field_name: promote
entity_type: node
bundle: testimonial
label: 'Promoted to front page'
description: ''
required: false
translatable: true
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: 'On'
off_label: 'Off'
field_type: boolean

View file

@ -0,0 +1,18 @@
uuid: bfc7affd-f035-4412-ac31-1bf84d11fc52
langcode: en
status: true
dependencies:
config:
- node.type.testimonial
id: node.testimonial.title
field_name: title
entity_type: node
bundle: testimonial
label: Name
description: ''
required: true
translatable: true
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View file

@ -0,0 +1,10 @@
uuid: e22481d7-c05e-4fff-bdea-0c04367236c6
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: iIBLu1j9n6Oo5PW-wpu5gdyNs9Kvv4LMRqtQUdJjRz8
id: fallback
label: 'Fallback date format'
locked: true
pattern: 'D, j M Y - H:i'

View file

@ -0,0 +1,10 @@
uuid: b8c42d04-2533-4901-8e99-808bb231964a
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: EOQltUQPmgc6UQ2rcJ4Xi_leCEJj5ui0TR-12duS-Tk
id: html_date
label: 'HTML Date'
locked: true
pattern: Y-m-d

View file

@ -0,0 +1,10 @@
uuid: 08bfe549-b9b8-492d-8b46-93412f1a46d3
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: jxfClwZIRXIdcvMrE--WkcZxDGUVoOIE3Sm2NRZlFuE
id: html_datetime
label: 'HTML Datetime'
locked: true
pattern: 'Y-m-d\TH:i:sO'

View file

@ -0,0 +1,10 @@
uuid: f8940adf-2999-46bf-a691-340b7b83d817
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: Z7KuCUwM_WdTNvLcoltuX3_8d-s-8FZkTN6KgNwF0eM
id: html_month
label: 'HTML Month'
locked: true
pattern: Y-m

View file

@ -0,0 +1,10 @@
uuid: 35cffa48-12a2-49c7-90d2-9eb2a681d9a1
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: M7yqicYkU36hRy5p9drAaGBBihhUD1OyujFrAaQ93ZE
id: html_time
label: 'HTML Time'
locked: true
pattern: 'H:i:s'

View file

@ -0,0 +1,10 @@
uuid: a8f81240-b69c-4a59-925e-85f4f781701f
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: wKD4WsoV_wFgv2vgI4mcAAFSIzrye17ykzdwrnApkfY
id: html_week
label: 'HTML Week'
locked: true
pattern: Y-\WW

View file

@ -0,0 +1,10 @@
uuid: afbd3e79-d08b-49be-99a3-af33a8813fea
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: OjekiQuX9RbVQ2_8jOHBL94RgYLePqX7wpfNGgcQzrk
id: html_year
label: 'HTML Year'
locked: true
pattern: 'Y'

View file

@ -0,0 +1,10 @@
uuid: a78e6d59-8184-47cf-adc0-96b2ebcf87e1
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: 5VpawMrKPEPCkoO4YpPa0TDFO2dgiIHfTziJtwlmUxc
id: html_yearless_date
label: 'HTML Yearless date'
locked: true
pattern: m-d

View file

@ -0,0 +1,10 @@
uuid: 79bbcadb-d88e-4828-961f-7ac7462dc99c
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: 5B4_r5Vd0_9UaJwtAC5yFCm9-k8NNvp1xiQNhFFkknU
id: long
label: 'Default long date'
locked: false
pattern: 'l, j F Y - H:i'

View file

@ -0,0 +1,10 @@
uuid: 224614a9-beee-4410-81a1-4fb5a37e4ecb
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: q7pDV2d9qFh1IVqvymOxUUYGSziZDeg961wURC0cSLs
id: medium
label: 'Default medium date'
locked: false
pattern: 'D, j M Y - H:i'

View file

@ -0,0 +1,10 @@
uuid: 58a02b53-b131-4541-b9c2-dbda35fdd828
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: SAeixlV7Djy_Ggv_1P95TiqD4KUihA5icvU521tA84Y
id: short
label: 'Default short date'
locked: false
pattern: 'F jS, Y'

View file

@ -0,0 +1,42 @@
uuid: effde481-0cf5-4124-b89e-34ce15872be5
langcode: en
status: true
dependencies:
config:
- block_content.type.basic
- field.field.block_content.basic.body
- field.field.block_content.basic.field_text_alignment
module:
- text
_core:
default_config_hash: jAps3FCxvKecABS_tgExbhCZrBLQB3bNPWw18WjE3ss
id: block_content.basic.default
targetEntityType: block_content
bundle: basic
mode: default
content:
body:
type: text_textarea_with_summary
weight: -4
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
field_text_alignment:
type: options_select
weight: 26
region: content
settings: { }
third_party_settings: { }
info:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,36 @@
uuid: 93e5cd61-e9b0-4f7d-a0fc-8e80c61fb0fa
langcode: en
status: true
dependencies:
config:
- comment.type.comment
- field.field.comment.comment.comment_body
module:
- text
_core:
default_config_hash: I0Pa0aQvT_jawlPo9oz4FE3h_ickc55dYKTPl6gILes
id: comment.comment.default
targetEntityType: comment
bundle: comment
mode: default
content:
author:
weight: -2
region: content
comment_body:
type: text_textarea
weight: 11
region: content
settings:
rows: 5
placeholder: ''
third_party_settings: { }
subject:
type: string_textfield
weight: 10
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,57 @@
uuid: 8cda3aaa-76e2-4500-9232-e3abd804c440
langcode: en
status: true
dependencies:
config:
- field.field.media.image.field_media_image
- image.style.thumbnail
- media.type.image
module:
- image
- path
_core:
default_config_hash: N2Imq6kLhAPzzFt_VZQCkWItt-UfqPOkcQlyC-3yTgM
id: media.image.default
targetEntityType: media
bundle: image
mode: default
content:
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_media_image:
type: image_image
weight: 0
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 100
region: content
settings:
display_label: true
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
hidden:
name: true

View file

@ -0,0 +1,32 @@
uuid: 22ff7161-ad01-4c89-acf9-6ef0915b46d2
langcode: en
status: true
dependencies:
config:
- core.entity_form_mode.media.media_library
- field.field.media.image.field_media_image
- image.style.thumbnail
- media.type.image
module:
- image
_core:
default_config_hash: BMLrK4zKp8-FFnMseBdT_6h6YipUsKRfbDf_3WUB5HA
id: media.image.media_library
targetEntityType: media
bundle: image
mode: media_library
content:
field_media_image:
type: image_image
weight: 1
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
hidden:
created: true
name: true
path: true
status: true
uid: true

View file

@ -0,0 +1,60 @@
uuid: 3a408fca-9414-4982-902a-5735309d9cac
langcode: en
status: true
dependencies:
config:
- field.field.media.podcast_recording.field_media_audio_file
- media.type.podcast_recording
module:
- file
- path
id: media.podcast_recording.default
targetEntityType: media
bundle: podcast_recording
mode: default
content:
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_media_audio_file:
type: file_generic
weight: 0
region: content
settings:
progress_indicator: throbber
third_party_settings: { }
name:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 100
region: content
settings:
display_label: true
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,27 @@
uuid: a9050af9-e59d-4c69-b6dd-e631faf10574
langcode: en
status: true
dependencies:
config:
- core.entity_form_mode.media.media_library
- field.field.media.podcast_recording.field_media_audio_file
- media.type.podcast_recording
id: media.podcast_recording.media_library
targetEntityType: media
bundle: podcast_recording
mode: media_library
content:
name:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
hidden:
created: true
field_media_audio_file: true
path: true
status: true
uid: true

View file

@ -0,0 +1,175 @@
uuid: fa83fcf5-873a-48c1-9b39-63790479aa2e
langcode: en
status: true
dependencies:
config:
- field.field.node.article.body
- field.field.node.article.comment
- field.field.node.article.field_image
- field.field.node.article.field_seo_analysis
- field.field.node.article.field_seo_description
- field.field.node.article.field_seo_image
- field.field.node.article.field_seo_title
- field.field.node.article.field_tags
- image.style.thumbnail
- node.type.article
module:
- comment
- field_group
- image
- media_library
- path
- text
- yoast_seo
third_party_settings:
field_group:
group_seo:
children:
- field_seo_title
- field_seo_description
- field_seo_image
- field_seo_analysis
label: 'Search Engine Optimization (SEO) Information'
region: content
parent_name: ''
weight: 50
format_type: details
format_settings:
classes: ''
show_empty_fields: false
id: group_seo
label_as_html: false
open: false
description: ''
required_fields: false
_core:
default_config_hash: ewbd6G2uX456-bgwseM2Q-KQG3RkASoyHmTh-XR3oLU
id: node.article.default
targetEntityType: node
bundle: article
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
comment:
type: comment_default
weight: 20
region: content
settings: { }
third_party_settings: { }
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_image:
type: image_image
weight: 1
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
field_seo_analysis:
type: yoast_seo_widget
weight: 18
region: content
settings:
edit_title: false
edit_description: false
render_theme: null
render_view_mode: default
third_party_settings: { }
field_seo_description:
type: string_textarea
weight: 16
region: content
settings:
rows: 5
placeholder: ''
third_party_settings: { }
field_seo_image:
type: media_library_widget
weight: 17
region: content
settings:
media_types: { }
third_party_settings: { }
field_seo_title:
type: string_textfield
weight: 15
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
field_tags:
type: entity_reference_autocomplete_tags
weight: 3
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 15
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 120
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 16
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,98 @@
uuid: 591ce9fc-ab71-4b4d-b776-b4291759f47f
langcode: en
status: true
dependencies:
config:
- field.field.node.daily_email.body
- field.field.node.daily_email.field_daily_email_cta
- node.type.daily_email
module:
- path
- text
id: node.daily_email.default
targetEntityType: node
bundle: daily_email
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_daily_email_cta:
type: entity_reference_autocomplete
weight: 121
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 15
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 120
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 16
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
url_redirects:
weight: 50
region: content
settings: { }
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,87 @@
uuid: 66add161-1d42-41b4-9eb3-adf47de3b200
langcode: en
status: true
dependencies:
config:
- field.field.node.daily_email_cta.body
- node.type.daily_email_cta
module:
- path
- text
id: node.daily_email_cta.default
targetEntityType: node
bundle: daily_email_cta
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 15
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 120
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 16
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
url_redirects:
weight: 50
region: content
settings: { }
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,147 @@
uuid: a969c6e9-2018-4b62-89ab-74e34c04d447
langcode: en
status: true
dependencies:
config:
- field.field.node.page.body
- field.field.node.page.field_seo_analysis
- field.field.node.page.field_seo_description
- field.field.node.page.field_seo_image
- field.field.node.page.field_seo_title
- field.field.node.page.layout_builder__layout
- node.type.page
module:
- field_group
- media_library
- path
- text
- yoast_seo
third_party_settings:
field_group:
group_seo:
children:
- field_seo_title
- field_seo_description
- field_seo_image
- field_seo_analysis
label: 'Search Engine Optimization (SEO) Information'
region: content
parent_name: ''
weight: 50
format_type: details
format_settings:
classes: ''
show_empty_fields: false
id: group_seo
label_as_html: false
open: false
description: ''
required_fields: false
_core:
default_config_hash: SfpLhPExzvR0MgFp0Wp7CrmgEnhcqQ-fXIWFhbf4ue0
id: node.page.default
targetEntityType: node
bundle: page
mode: default
content:
body:
type: text_textarea_with_summary
weight: 31
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_seo_analysis:
type: yoast_seo_widget
weight: 18
region: content
settings:
edit_title: false
edit_description: false
render_theme: null
render_view_mode: default
third_party_settings: { }
field_seo_description:
type: string_textarea
weight: 16
region: content
settings:
rows: 5
placeholder: ''
third_party_settings: { }
field_seo_image:
type: media_library_widget
weight: 17
region: content
settings:
media_types: { }
third_party_settings: { }
field_seo_title:
type: string_textfield
weight: 15
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 15
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 120
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 16
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
hidden:
layout_builder__layout: true

View file

@ -0,0 +1,124 @@
uuid: 64df3284-e9fd-41c2-b59e-e6d256a1308f
langcode: en
status: true
dependencies:
config:
- field.field.node.podcast_episode.body
- field.field.node.podcast_episode.field_episode_number
- field.field.node.podcast_episode.field_episode_recording
- field.field.node.podcast_episode.field_podcast_guests
- field.field.node.podcast_episode.field_topic
- node.type.podcast_episode
module:
- media_library
- path
- text
id: node.podcast_episode.default
targetEntityType: node
bundle: podcast_episode
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 4
region: content
settings: { }
third_party_settings: { }
field_episode_number:
type: number
weight: 12
region: content
settings:
placeholder: ''
third_party_settings: { }
field_episode_recording:
type: media_library_widget
weight: 11
region: content
settings:
media_types: { }
third_party_settings: { }
field_podcast_guests:
type: entity_reference_autocomplete
weight: 13
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
field_topic:
type: string_textfield
weight: 1
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 8
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 6
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 5
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 10
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 7
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 3
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
url_redirects:
weight: 9
region: content
settings: { }
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,109 @@
uuid: 0bd43f8f-5a30-432b-8e6a-a99013b15593
langcode: en
status: true
dependencies:
config:
- field.field.node.presentation.body
- field.field.node.presentation.field_events
- node.type.presentation
module:
- paragraphs
- path
- text
id: node.presentation.default
targetEntityType: node
bundle: presentation
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 2
region: content
settings: { }
third_party_settings: { }
field_events:
type: paragraphs
weight: 9
region: content
settings:
title: Paragraph
title_plural: Paragraphs
edit_mode: open
closed_mode: summary
autocollapse: none
closed_mode_threshold: 0
add_mode: dropdown
form_display_mode: default
default_paragraph_type: event
features:
add_above: '0'
collapse_edit_all: '0'
convert: '0'
duplicate: '0'
third_party_settings: { }
path:
type: path
weight: 6
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 4
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 3
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 7
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 5
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 1
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
url_redirects:
weight: 50
region: content
settings: { }
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,140 @@
uuid: b20a3539-3067-458a-b0ee-28b7d79f37db
langcode: en
status: true
dependencies:
config:
- field.field.node.testimonial.body
- field.field.node.testimonial.field_image
- field.field.node.testimonial.field_role
- field.field.node.testimonial.field_testimonial_type
- field.field.node.testimonial.field_url
- field.field.node.testimonial.field_weight
- image.style.thumbnail
- node.type.testimonial
module:
- image
- link
- path
- tagify
- text
- weight
id: node.testimonial.default
targetEntityType: node
bundle: testimonial
mode: default
content:
body:
type: text_textarea_with_summary
weight: 2
region: content
settings:
rows: 9
summary_rows: 3
placeholder: ''
show_summary: false
third_party_settings: { }
created:
type: datetime_timestamp
weight: 10
region: content
settings: { }
third_party_settings: { }
field_image:
type: image_image
weight: 1
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
field_role:
type: string_textfield
weight: 121
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
field_testimonial_type:
type: tagify_entity_reference_autocomplete_widget
weight: 124
region: content
settings:
match_operator: CONTAINS
match_limit: 10
placeholder: ''
suggestions_dropdown: 1
show_entity_id: 0
show_info_label: 0
info_label: ''
third_party_settings: { }
field_url:
type: link_default
weight: 122
region: content
settings:
placeholder_url: ''
placeholder_title: ''
third_party_settings: { }
field_weight:
type: weight_selector
weight: 123
region: content
settings: { }
third_party_settings: { }
path:
type: path
weight: 30
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 15
region: content
settings:
display_label: true
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 120
region: content
settings:
display_label: true
third_party_settings: { }
sticky:
type: boolean_checkbox
weight: 16
region: content
settings:
display_label: true
third_party_settings: { }
title:
type: string_textfield
weight: -5
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 5
region: content
settings:
match_operator: CONTAINS
match_limit: 10
size: 60
placeholder: ''
third_party_settings: { }
url_redirects:
weight: 50
region: content
settings: { }
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,49 @@
uuid: 8c6aad6f-2b1b-4ac4-8064-45e75a079d78
langcode: en
status: true
dependencies:
config:
- field.field.paragraph.event.field_date
- field.field.paragraph.event.field_event_name
- field.field.paragraph.event.field_location
- field.field.paragraph.event.field_online
- paragraphs.paragraphs_type.event
module:
- datetime
id: paragraph.event.default
targetEntityType: paragraph
bundle: event
mode: default
content:
field_date:
type: datetime_default
weight: 1
region: content
settings: { }
third_party_settings: { }
field_event_name:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
field_location:
type: string_textfield
weight: 2
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
field_online:
type: boolean_checkbox
weight: 3
region: content
settings:
display_label: true
third_party_settings: { }
hidden:
created: true
status: true

View file

@ -0,0 +1,38 @@
uuid: a3909c1d-6c4d-4218-95cf-a19cb19d8855
langcode: en
status: true
dependencies:
config:
- field.field.user.user.user_picture
- image.style.thumbnail
module:
- image
- user
_core:
default_config_hash: FaQ9Ptcpxpg30AtiqRDtl_8zbJArHP1LPfug_s59TOA
id: user.user.default
targetEntityType: user
bundle: user
mode: default
content:
account:
weight: -10
region: content
contact:
weight: 5
region: content
language:
weight: 0
region: content
timezone:
weight: 6
region: content
user_picture:
type: image_image
weight: -1
region: content
settings:
progress_indicator: throbber
preview_image_style: thumbnail
third_party_settings: { }
hidden: { }

View file

@ -0,0 +1,16 @@
uuid: 4c6369c6-2f8a-46c8-bf1b-6c1768a72c4c
langcode: en
status: true
dependencies:
module:
- media
enforced:
module:
- media_library
_core:
default_config_hash: 04_dAqpWYP1WmsXZ7IXJ7-yarCvNddD10EUkBDtIFy4
id: media.media_library
label: 'Media library'
description: ''
targetEntityType: media
cache: true

View file

@ -0,0 +1,13 @@
uuid: b06e0687-31eb-49ee-a42d-7da8b381c129
langcode: en
status: true
dependencies:
module:
- user
_core:
default_config_hash: 5pE_4hurqtIlZN3XDi7eTo5RG13BMG0Rh9HYlRI3h8U
id: user.register
label: Register
description: ''
targetEntityType: user
cache: true

View file

@ -0,0 +1,33 @@
uuid: 42078119-8f86-41cb-8ad8-e2d5c02e77d6
langcode: en
status: true
dependencies:
config:
- block_content.type.basic
- field.field.block_content.basic.body
- field.field.block_content.basic.field_text_alignment
module:
- options
- text
_core:
default_config_hash: hBNNDTFwakREOTa6GGMqN899Iyrii0hInwSJtQ7Kj30
id: block_content.basic.default
targetEntityType: block_content
bundle: basic
mode: default
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
field_text_alignment:
type: list_default
label: above
settings: { }
third_party_settings: { }
weight: 1
region: content
hidden: { }

View file

@ -0,0 +1,27 @@
uuid: 94e49367-2e5c-4898-8799-ab6d40546f32
langcode: en
status: true
dependencies:
config:
- comment.type.comment
- field.field.comment.comment.comment_body
module:
- text
_core:
default_config_hash: aBQUGsQ46M4048fIlFuTXwl2zV0j2cJX89CTUobh9hA
id: comment.comment.default
targetEntityType: comment
bundle: comment
mode: default
content:
comment_body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
links:
weight: 100
region: content
hidden: { }

View file

@ -0,0 +1,33 @@
uuid: b222569c-7c4c-48d7-bdb8-fc6a0adfe262
langcode: en
status: true
dependencies:
config:
- field.field.media.image.field_media_image
- image.style.large
- media.type.image
module:
- image
_core:
default_config_hash: t2YAVeSqMs3Gpnfp_plCnQ2TsoC0u57VCUWl8e2jMMM
id: media.image.default
targetEntityType: media
bundle: image
mode: default
content:
field_media_image:
type: image
label: visually_hidden
settings:
image_style: large
image_link: ''
image_loading:
attribute: lazy
third_party_settings: { }
weight: 1
region: content
hidden:
created: true
name: true
thumbnail: true
uid: true

View file

@ -0,0 +1,34 @@
uuid: 8e4a6f81-d80f-468c-b43a-7b2e981f0a2d
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.media.media_library
- field.field.media.image.field_media_image
- image.style.medium
- media.type.image
module:
- image
_core:
default_config_hash: ILLWu5KFvbsX6J7sh2Itd4w8-lBBRhR_H8ZrmQiN2yo
id: media.image.media_library
targetEntityType: media
bundle: image
mode: media_library
content:
thumbnail:
type: image
label: hidden
settings:
image_link: ''
image_style: medium
image_loading:
attribute: lazy
third_party_settings: { }
weight: 0
region: content
hidden:
created: true
field_media_image: true
name: true
uid: true

View file

@ -0,0 +1,30 @@
uuid: 3e04767f-3d30-419d-a12a-2e6425e92f11
langcode: en
status: true
dependencies:
config:
- field.field.media.podcast_recording.field_media_audio_file
- media.type.podcast_recording
module:
- file
id: media.podcast_recording.default
targetEntityType: media
bundle: podcast_recording
mode: default
content:
field_media_audio_file:
type: file_audio
label: visually_hidden
settings:
controls: true
autoplay: false
loop: false
multiple_file_display_type: tags
third_party_settings: { }
weight: 0
region: content
hidden:
created: true
name: true
thumbnail: true
uid: true

View file

@ -0,0 +1,32 @@
uuid: 0ca77936-0041-4ffc-8b34-3a159442c584
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.media.media_library
- field.field.media.podcast_recording.field_media_audio_file
- image.style.medium
- media.type.podcast_recording
module:
- image
id: media.podcast_recording.media_library
targetEntityType: media
bundle: podcast_recording
mode: media_library
content:
thumbnail:
type: image
label: hidden
settings:
image_link: ''
image_style: medium
image_loading:
attribute: lazy
third_party_settings: { }
weight: 0
region: content
hidden:
created: true
field_media_audio_file: true
name: true
uid: true

View file

@ -0,0 +1,73 @@
uuid: 5318a3b5-846d-4ae5-b82f-3cbf667262b2
langcode: en
status: true
dependencies:
config:
- core.entity_view_display.comment.comment.default
- field.field.node.article.body
- field.field.node.article.comment
- field.field.node.article.field_image
- field.field.node.article.field_seo_analysis
- field.field.node.article.field_seo_description
- field.field.node.article.field_seo_image
- field.field.node.article.field_seo_title
- field.field.node.article.field_tags
- image.style.wide
- node.type.article
module:
- comment
- image
- text
- user
_core:
default_config_hash: br6izr-iGEu--JvNbCJNtOBpRnxpFLXfoV5y61U9Nqc
id: node.article.default
targetEntityType: node
bundle: article
mode: default
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
comment:
type: comment_default
label: above
settings:
view_mode: default
pager_id: 0
third_party_settings: { }
weight: 110
region: content
field_image:
type: image
label: hidden
settings:
image_link: ''
image_style: wide
image_loading:
attribute: eager
third_party_settings: { }
weight: -1
region: content
field_tags:
type: entity_reference_label
label: above
settings:
link: true
third_party_settings: { }
weight: 10
region: content
links:
settings: { }
third_party_settings: { }
weight: 100
region: content
hidden:
field_seo_analysis: true
field_seo_description: true
field_seo_image: true
field_seo_title: true

View file

@ -0,0 +1,36 @@
uuid: dad55854-035a-4d28-910a-73331de0674d
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.rss
- field.field.node.article.body
- field.field.node.article.comment
- field.field.node.article.field_image
- field.field.node.article.field_seo_analysis
- field.field.node.article.field_seo_description
- field.field.node.article.field_seo_image
- field.field.node.article.field_seo_title
- field.field.node.article.field_tags
- node.type.article
module:
- user
_core:
default_config_hash: 2rIr6K5Q0UQ9khg0zE_CK-PtJH76UL-BDDZcZnZzwCc
id: node.article.rss
targetEntityType: node
bundle: article
mode: rss
content:
links:
weight: 100
region: content
hidden:
body: true
comment: true
field_image: true
field_seo_analysis: true
field_seo_description: true
field_seo_image: true
field_seo_title: true
field_tags: true

View file

@ -0,0 +1,63 @@
uuid: a99f221d-fab8-4ce4-9a72-9a25d1e8157b
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.teaser
- field.field.node.article.body
- field.field.node.article.comment
- field.field.node.article.field_image
- field.field.node.article.field_seo_analysis
- field.field.node.article.field_seo_description
- field.field.node.article.field_seo_image
- field.field.node.article.field_seo_title
- field.field.node.article.field_tags
- image.style.medium
- node.type.article
module:
- image
- text
- user
_core:
default_config_hash: O8PxzfG8DOHHRu6M23kwR6TDPq_MNfYQ10Mp367ICUQ
id: node.article.teaser
targetEntityType: node
bundle: article
mode: teaser
content:
body:
type: text_summary_or_trimmed
label: hidden
settings:
trim_length: 600
third_party_settings: { }
weight: 0
region: content
field_image:
type: image
label: hidden
settings:
image_link: content
image_style: medium
image_loading:
attribute: lazy
third_party_settings: { }
weight: -1
region: content
field_tags:
type: entity_reference_label
label: above
settings:
link: true
third_party_settings: { }
weight: 10
region: content
links:
weight: 100
region: content
hidden:
comment: true
field_seo_analysis: true
field_seo_description: true
field_seo_image: true
field_seo_title: true

View file

@ -0,0 +1,73 @@
uuid: 9e0c0e1c-fd1b-46ef-82cc-17e248b39748
langcode: en
status: true
dependencies:
config:
- field.field.node.daily_email.body
- field.field.node.daily_email.field_daily_email_cta
- node.type.daily_email
module:
- layout_builder
- layout_discovery
- opd_daily_emails
- text
- user
third_party_settings:
layout_builder:
enabled: true
allow_custom: false
sections:
-
layout_id: layout_onecol
layout_settings:
label: ''
components:
5f64dbd7-4d0e-4ac0-ae42-a1698b66931a:
uuid: 5f64dbd7-4d0e-4ac0-ae42-a1698b66931a
region: content
configuration:
id: 'field_block:node:daily_email:body'
label_display: '0'
context_mapping:
entity: layout_builder.entity
formatter:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
additional: { }
third_party_settings: { }
-
layout_id: layout_onecol
layout_settings:
label: ''
context_mapping: { }
components:
fe7184b1-4b65-4fc2-bb42-3bdbb81287c7:
uuid: fe7184b1-4b65-4fc2-bb42-3bdbb81287c7
region: content
configuration:
id: opd_daily_emails_kit_subscription_block
label: 'Was this interesting?'
label_display: visible
provider: opd_daily_emails
context_mapping: { }
weight: 0
additional: { }
third_party_settings: { }
id: node.daily_email.default
targetEntityType: node
bundle: daily_email
mode: default
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
hidden:
field_daily_email_cta: true
links: true

View file

@ -0,0 +1,32 @@
uuid: fa37d7a0-718a-45df-9142-e32e47a15e1f
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.rss
- field.field.node.daily_email.body
- field.field.node.daily_email.field_daily_email_cta
- node.type.daily_email
module:
- layout_builder
- text
- user
third_party_settings:
layout_builder:
enabled: false
allow_custom: false
id: node.daily_email.rss
targetEntityType: node
bundle: daily_email
mode: rss
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
hidden:
field_daily_email_cta: true
links: true

View file

@ -0,0 +1,28 @@
uuid: 52b4959b-3ab7-4cb4-97c7-4ecb707bde2f
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.teaser
- field.field.node.daily_email.body
- field.field.node.daily_email.field_daily_email_cta
- node.type.daily_email
module:
- text
- user
id: node.daily_email.teaser
targetEntityType: node
bundle: daily_email
mode: teaser
content:
body:
type: text_summary_or_trimmed
label: hidden
settings:
trim_length: 600
third_party_settings: { }
weight: 0
region: content
hidden:
field_daily_email_cta: true
links: true

View file

@ -0,0 +1,28 @@
uuid: a09e31bc-1142-4441-a82c-aa658d1e45fa
langcode: en
status: true
dependencies:
config:
- field.field.node.daily_email_cta.body
- node.type.daily_email_cta
module:
- text
- user
id: node.daily_email_cta.default
targetEntityType: node
bundle: daily_email_cta
mode: default
content:
body:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
links:
settings: { }
third_party_settings: { }
weight: 100
region: content
hidden: { }

Some files were not shown because too many files have changed in this diff Show more