├── templates
├── .gitkeep
├── pages
│ ├── _entry.twig
│ ├── _entry-type
│ │ ├── home.twig
│ │ ├── pages.twig
│ │ ├── contactPage.twig
│ │ └── newsListing.twig
│ └── _news-category.twig
├── search
│ ├── index.twig
│ ├── _search-item.twig
│ └── _components
│ │ └── search.twig
├── _includes
│ ├── hero.twig
│ ├── language-switcher.twig
│ ├── notice-bar.twig
│ ├── footer.twig
│ ├── responsiveImage.twig
│ ├── news-listing-article.twig
│ ├── contact-form.twig
│ └── dark-mode.twig
├── _user-guide
│ ├── blocks
│ │ ├── image.twig
│ │ ├── copy.twig
│ │ ├── youtubeVideo.twig
│ │ └── video.twig
│ ├── _entry.twig
│ └── styles.twig
├── _blocks
│ ├── fragmentBlock.twig
│ ├── codeEmbed.twig
│ ├── hero
│ │ ├── basicHero.twig
│ │ ├── standardHero.twig
│ │ └── sliderHero.twig
│ ├── copy.twig
│ ├── _layout.twig
│ ├── callToAction.twig
│ ├── video.twig
│ └── relatedEntries.twig
├── index.twig
├── _javascript
│ └── hero-swiper.js
├── _whitelist.twig
├── 404.twig
├── sitemap.twig
├── _macros.twig
├── _components
│ ├── news-listing.twig
│ ├── pagination.twig
│ └── contact-form.twig
├── _tw-config
│ └── tw.json
├── _layout.twig
└── criticalCss
│ └── index_critical.min.css
├── dbs
└── .gitignore
├── public
├── cpresources
│ └── .gitignore
├── assets
│ ├── images
│ │ ├── caffeine-logo.jpg
│ │ └── svg
│ │ │ ├── hamburger.svg
│ │ │ ├── search.svg
│ │ │ ├── close.svg
│ │ │ ├── chevron-left.svg
│ │ │ ├── chevron-double-left.svg
│ │ │ ├── chevron-double-right.svg
│ │ │ └── chevron-right.svg
│ ├── manifest.json
│ └── css
│ │ └── cp-css.css
├── index.php
├── .htaccess
└── web.config
├── storage
├── config-deltas
│ └── .gitignore
└── .gitignore
├── db.sql.gz
├── config
├── project
│ ├── siteGroups
│ │ └── 2fcd48d2-b2b1-479f-9015-016904e4eab4.yaml
│ ├── graphql
│ │ ├── graphql.yaml
│ │ └── schemas
│ │ │ └── 8084d027-d1a0-424e-930b-a4217b9862f2.yaml
│ ├── users
│ │ ├── users.yaml
│ │ └── groups
│ │ │ └── siteAdmin--0878c4de-b946-4c8e-bcce-fe18cd77a73e.yaml
│ ├── ckeditor
│ │ └── configs
│ │ │ ├── b9d8d694-0313-4709-a12e-06b36b2333c7.yaml
│ │ │ ├── 170a124d-5ba5-43f5-a663-8f85be97b38b.yaml
│ │ │ ├── 3e09420e-30db-49dd-9520-4775f6667303.yaml
│ │ │ └── 12f17257-6f1c-4e4c-837e-17ad76241a60.yaml
│ ├── sites
│ │ ├── default--1a78d395-d81a-4b77-8da7-30a49123bbee.yaml
│ │ └── french--b9fdef79-5b63-4932-a9aa-8d18f937e6d9.yaml
│ ├── fields
│ │ ├── lightSwitch--ce14c790-b25f-464b-8ce8-0e949adc707b.yaml
│ │ ├── hideFromNav--56f86cc6-5713-447f-8b10-e53f06ef42eb.yaml
│ │ ├── enableNoticeBar--5489ed3b-28c1-4a26-ac7e-97b0182e6652.yaml
│ │ ├── embed--3b9496a7-4539-4c28-91bc-3e51c68f4187.yaml
│ │ ├── input--c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde.yaml
│ │ ├── relatedEntries--5026b221-a48f-4868-9f48-07428068e77e.yaml
│ │ ├── fragment--aac80dd6-df34-4cd2-a92f-14debb37b911.yaml
│ │ ├── copyBasic--da3d7ec4-1d85-47ba-a517-6c81d94cc9d2.yaml
│ │ ├── userGuide--d974bf8d-647d-45f3-98be-0733d5e3e1ba.yaml
│ │ ├── copy--f90a85bd-91b2-462b-acb4-8f265ded647e.yaml
│ │ ├── slides--8c583e9a-a56d-486d-8550-e7eae61c8088.yaml
│ │ ├── newsCategories--fbdde691-0df2-4e8e-b1a8-61a1f555fd0e.yaml
│ │ ├── noticeBarLocation--52f12f1b-ba11-48f3-985d-0ee6e2a6dc4e.yaml
│ │ ├── seo--149ec41c-d6de-4ae5-84db-08d285801dd1.yaml
│ │ ├── hero--ab8abc7e-2a4d-4858-98ea-9a6954a434da.yaml
│ │ ├── image2--7bf7da79-8f7d-4a1b-8129-121b24c0d99b.yaml
│ │ ├── image--b2f53aa5-81a3-466c-af2d-e30dab4ed3d8.yaml
│ │ ├── screenshots--25e2157e-9a82-41cd-970f-4fc58cb3a835.yaml
│ │ ├── listingImage--c33fedfd-ec76-45db-93dc-a12697e4a2aa.yaml
│ │ ├── videoUpload--6f74be98-1b1b-470e-a96a-727b01e0b225.yaml
│ │ ├── backgroundImage--cc618569-5c0e-4ff7-9b4a-2fe9ed27af1f.yaml
│ │ ├── padding--127f0d67-cfaf-4e5d-b3f8-111b7fda6f64.yaml
│ │ ├── fallbackImage--12c7de12-987a-4aa4-890f-ec5cde880851.yaml
│ │ └── contentBuilder--77af5a62-d057-494a-91ac-9edf65b6b266.yaml
│ ├── sections
│ │ ├── userGuide--0784ad32-f952-40b1-9f6c-d0e67d502551.yaml
│ │ ├── error404--29d88d99-dd38-43f6-9ac5-3438833c75ba.yaml
│ │ ├── fragments--ce27286a-7635-4494-9c9c-77f2d73352f4.yaml
│ │ ├── noticeBar--408314ae-e32d-471b-a729-25f4ce759ac4.yaml
│ │ ├── news--9c12e5ad-18e9-498f-bf50-489513409007.yaml
│ │ ├── pages--666b31c2-d6d5-4e80-b9aa-f57b66d5b54a.yaml
│ │ └── newsCategories--4b342e70-0223-4c29-9237-86a023f74f1b.yaml
│ ├── globalSets
│ │ └── fallback--415a954c-eb55-4533-9ffd-64b3eade9469.yaml
│ ├── entryTypes
│ │ ├── basicHero--b4d947dc-370e-4404-807b-b165534a1503.yaml
│ │ ├── fragmentBlock--48d0d0b8-2e48-4232-8b09-a401c6493902.yaml
│ │ ├── newsCategories--ef488e30-b35e-4bf8-87a3-34f0f76b622f.yaml
│ │ ├── image--4427e835-20ed-496b-9469-831bb0882185.yaml
│ │ ├── video--2456a57a-605c-4af0-9611-f48ca631ff0a.yaml
│ │ ├── codeEmbed--a983660a-2b2e-413f-a79c-498b502b4f85.yaml
│ │ ├── youtubeVideo--c4527788-b877-44f3-9a2d-071f696877fa.yaml
│ │ ├── fragments--c166cd47-6f64-49e0-b33d-6aceadb3fcc3.yaml
│ │ ├── userGuide--475a351b-2442-4767-8ab6-1b39216d0c61.yaml
│ │ ├── error404--b312d78c-b490-46da-aeff-70a1be5a5505.yaml
│ │ ├── sliderHero--323e9af3-aa75-4f1c-82eb-370e40179f41.yaml
│ │ ├── copy2--0187ae10-82fa-43e8-ac5c-e8fa4f2e3b29.yaml
│ │ ├── video2--a399fb79-90a6-48a0-be1f-38d2b8a81af5.yaml
│ │ ├── copy--70339fac-606b-4827-9a19-c97a3f0bd59c.yaml
│ │ ├── standardHero--120a7750-0967-496d-9315-bba6d83eb4b1.yaml
│ │ ├── slide--d399ecfb-7ec8-47d8-84ed-b8447e779a67.yaml
│ │ ├── relatedEntries--c951c9a0-1cca-4210-bef8-2d3d0446e841.yaml
│ │ ├── home--ea7fe716-adee-4200-a8ca-15362418cd97.yaml
│ │ ├── callToAction--57a74cde-de83-4b69-88ff-a4472daac7f7.yaml
│ │ ├── noticeBar--5bca37e0-a30f-48fd-9fde-3105fb9d9738.yaml
│ │ ├── newsListing--e3dea9df-426f-43a5-96fd-927882533aa9.yaml
│ │ └── news--51b9c3fc-be2a-4ef3-9f2c-66372327c604.yaml
│ └── volumes
│ │ ├── userGuide--d19b4314-0267-4e95-9e63-2462a334eea1.yaml
│ │ └── uploads--70f5d47b-4830-4d51-95fe-bc0f7ccc0670.yaml
├── htmlpurifier
│ └── Default.json
├── environment-label.php
├── knock-knock.php
├── routes.php
├── app.php
├── db.php
├── assetrev.php
└── general.php
├── src
├── img
│ ├── caffeine-logo.jpg
│ └── svg
│ │ ├── hamburger.svg
│ │ ├── search.svg
│ │ ├── chevron-left.svg
│ │ ├── chevron-double-right.svg
│ │ ├── chevron-double-left.svg
│ │ ├── chevron-right.svg
│ │ └── close.svg
└── js
│ ├── app.js
│ └── generate-manifest.js
├── postcss.config.js
├── .gitignore
├── craft
├── .vscode
└── launch.json
├── bootstrap.php
├── browsersync.config.js
├── .env.example
├── tailwind.config.js
├── composer.json
├── .ddev
└── commands
│ └── host
│ └── launch-site
└── package.json
/templates/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dbs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/public/cpresources/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/config-deltas/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/db.sql.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CreateSean/craft-starter/HEAD/db.sql.gz
--------------------------------------------------------------------------------
/config/project/siteGroups/2fcd48d2-b2b1-479f-9015-016904e4eab4.yaml:
--------------------------------------------------------------------------------
1 | name: 'Craft Starter'
2 |
--------------------------------------------------------------------------------
/storage/.gitignore:
--------------------------------------------------------------------------------
1 | backups
2 | composer-backups
3 | config-backups
4 | logs
5 | runtime
6 |
--------------------------------------------------------------------------------
/config/project/graphql/graphql.yaml:
--------------------------------------------------------------------------------
1 | publicToken:
2 | enabled: true
3 | expiryDate: null
4 |
--------------------------------------------------------------------------------
/src/img/caffeine-logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CreateSean/craft-starter/HEAD/src/img/caffeine-logo.jpg
--------------------------------------------------------------------------------
/config/project/graphql/schemas/8084d027-d1a0-424e-930b-a4217b9862f2.yaml:
--------------------------------------------------------------------------------
1 | isPublic: true
2 | name: 'Public Schema'
3 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | 'tailwindcss': {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/assets/images/caffeine-logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CreateSean/craft-starter/HEAD/public/assets/images/caffeine-logo.jpg
--------------------------------------------------------------------------------
/public/assets/images/svg/hamburger.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/project/users/users.yaml:
--------------------------------------------------------------------------------
1 | allowPublicRegistration: false
2 | deactivateByDefault: false
3 | defaultGroup: null
4 | photoSubpath: null
5 | photoVolumeUid: null
6 | requireEmailVerification: true
7 |
--------------------------------------------------------------------------------
/templates/pages/_entry.twig:
--------------------------------------------------------------------------------
1 | {# homepage #}
2 | {% extends '_layout' %}
3 |
4 | {% block content %}
5 | {# load the entry type template #}
6 | {% include "pages/_entry-type/" ~ entry.type %}
7 | {% endblock %}
--------------------------------------------------------------------------------
/src/img/svg/hamburger.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/templates/search/index.twig:
--------------------------------------------------------------------------------
1 | {# Search #}
2 | {% extends '_layout' %}
3 |
4 | {% block content %}
5 |
6 |
7 | {# include reactive search with sprig #}
8 | {{ sprig('search/_components/search', { 'limit':12}) }}
9 |
10 | {% endblock %}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.env
2 | /.env-production
3 | /.idea
4 | /vendor
5 | .DS_Store
6 | /node_modules
7 | /translations/
8 | /public/uploads/
9 | /public/guide/
10 | *.sql
11 | *.bak
12 | /web/assets/cpresources/
13 | .vscode/tasks.json
14 | .tarbells/
15 |
--------------------------------------------------------------------------------
/templates/_includes/hero.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 | {# include hero blocks #}
4 |
5 | {% for block in entry.hero.all() %}
6 | {% include "_blocks/hero/" ~ block.type %}
7 | {% endfor %}
--------------------------------------------------------------------------------
/config/project/ckeditor/configs/b9d8d694-0313-4709-a12e-06b36b2333c7.yaml:
--------------------------------------------------------------------------------
1 | headingLevels:
2 | - 1
3 | - 2
4 | - 3
5 | - 4
6 | - 5
7 | - 6
8 | name: Simple
9 | toolbar:
10 | - heading
11 | - '|'
12 | - bold
13 | - italic
14 | - link
15 |
--------------------------------------------------------------------------------
/config/project/sites/default--1a78d395-d81a-4b77-8da7-30a49123bbee.yaml:
--------------------------------------------------------------------------------
1 | baseUrl: $SITE_URL_EN
2 | enabled: true
3 | handle: default
4 | hasUrls: true
5 | language: en
6 | name: English
7 | primary: true
8 | siteGroup: 2fcd48d2-b2b1-479f-9015-016904e4eab4 # Craft Starter
9 | sortOrder: 1
10 |
--------------------------------------------------------------------------------
/config/project/sites/french--b9fdef79-5b63-4932-a9aa-8d18f937e6d9.yaml:
--------------------------------------------------------------------------------
1 | baseUrl: $SITE_URL_FR
2 | enabled: '1'
3 | handle: french
4 | hasUrls: true
5 | language: fr
6 | name: Français
7 | primary: false
8 | siteGroup: 2fcd48d2-b2b1-479f-9015-016904e4eab4 # Craft Starter
9 | sortOrder: 2
10 |
--------------------------------------------------------------------------------
/templates/pages/_entry-type/home.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 | {# Hero #}
3 | {% include "_includes/hero" %}
4 |
5 | {% for block in entry.contentBuilder.collect() %}
6 | {% include "_blocks/" ~ block.type %}
7 | {% endfor %}
--------------------------------------------------------------------------------
/templates/_user-guide/blocks/image.twig:
--------------------------------------------------------------------------------
1 | {% if block.sectionTitle|length %}
2 |
{{ block.sectionTitle }}
3 | {% endif %}
4 |
5 | {% set image = block.screenshots.one() %}
6 |
7 |
8 | {% if block.caption|length %}{{ block.caption }}{% endif %}
9 |
--------------------------------------------------------------------------------
/templates/pages/_entry-type/pages.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 | {# Hero #}
4 | {% include "_includes/hero" %}
5 |
6 | {% for block in entry.contentBuilder.collect() %}
7 | {% include "_blocks/" ~ block.type %}
8 | {% endfor %}
9 |
--------------------------------------------------------------------------------
/templates/_blocks/fragmentBlock.twig:
--------------------------------------------------------------------------------
1 | {# get fragment entry #}
2 | {{ craft.app.config.general.devMode ? ('') | raw }}
3 |
4 | {% set entry = block.fragment.one() %}
5 |
6 | {% for block in entry.contentBuilder.all() %}
7 | {% include "_blocks/" ~ block.type %}
8 | {% endfor %}
9 |
--------------------------------------------------------------------------------
/templates/_user-guide/blocks/copy.twig:
--------------------------------------------------------------------------------
1 | {% if block.sectionTitle|length %}
2 | {{ block.sectionTitle }}
3 | {% endif %}
4 |
5 | {% if block.sectionSubtitle|length %}
6 | {{ block.sectionSubtitle }}
7 | {% endif %}
8 |
9 | {% if block.copy %}
10 | {{ block.copy }}
11 | {% endif %}
12 |
--------------------------------------------------------------------------------
/templates/pages/_news-category.twig:
--------------------------------------------------------------------------------
1 | {# homepage #}
2 | {% extends '_layout' %}
3 |
4 | {% block content %}
5 | {#
6 | load the entry news listing template
7 | so we can have categories with same layout and sprig pagination
8 | #}
9 | {% include "pages/_entry-type/newsListing" %}
10 | {% endblock %}
--------------------------------------------------------------------------------
/templates/index.twig:
--------------------------------------------------------------------------------
1 | {# homepage
2 |
3 | home page template is at pages/_entry-type/home
4 |
5 | #}
6 | {% extends '_layout' %}
7 |
8 | {% set entry = craft.entries.slug('__home__').one() %}
9 |
10 | {% block content %}
11 |
12 | home page template is at pages/_entry-type/home
13 |
14 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | run();
13 |
--------------------------------------------------------------------------------
/public/assets/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "js/app.js": "js/app.js?v=b75450f7",
3 | "js/app.min.js": "js/app.min.js?v=c01f82c2",
4 | "js/plyr.min.js": "js/plyr.min.js?v=4fb2ab36",
5 | "css/app.css": "css/app.css?v=85da0f61",
6 | "css/cp-css.css": "css/cp-css.css?v=4640657e",
7 | "css/vendor.combined.css": "css/vendor.combined.css?v=387c74ea"
8 | }
--------------------------------------------------------------------------------
/templates/_javascript/hero-swiper.js:
--------------------------------------------------------------------------------
1 | const swiper = new Swiper('.hero-swiper', {
2 | // Optional parameters
3 | loop: true,
4 |
5 | // pagination: {
6 | // el: ".home-pagination",
7 | // clickable:true,
8 | // },
9 | navigation: {
10 | nextEl: ".swiper-button-next",
11 | prevEl: ".swiper-button-prev",
12 | },
13 | });
--------------------------------------------------------------------------------
/templates/search/_search-item.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 |
7 | customize search-item template with more info as needed
8 |
9 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine On
3 |
4 | # Send would-be 404 requests to Craft
5 | RewriteCond %{REQUEST_FILENAME} !-f
6 | RewriteCond %{REQUEST_FILENAME} !-d
7 | RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
8 | RewriteRule (.+) index.php?p=$1 [QSA,L]
9 |
10 |
--------------------------------------------------------------------------------
/src/img/svg/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/project/fields/lightSwitch--ce14c790-b25f-464b-8ce8-0e949adc707b.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: lightSwitch
3 | instructions: null
4 | name: 'Light Switch'
5 | searchable: false
6 | settings:
7 | default: false
8 | offLabel: null
9 | onLabel: null
10 | translationKeyFormat: null
11 | translationMethod: site
12 | type: craft\fields\Lightswitch
13 |
--------------------------------------------------------------------------------
/public/assets/images/svg/search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/craft:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | run();
14 | exit($exitCode);
15 |
--------------------------------------------------------------------------------
/config/htmlpurifier/Default.json:
--------------------------------------------------------------------------------
1 | {
2 | "Attr.AllowedFrameTargets": [
3 | "_blank"
4 | ],
5 | "Attr.EnableID": true,
6 | "HTML.AllowedComments": [
7 | "pagebreak"
8 | ],
9 | "HTML.ForbiddenAttributes": [
10 | "style"
11 | ],
12 | "HTML.SafeIframe": true,
13 | "URI.SafeIframeRegexp": "%^(https?:)?//(www.youtube.com/embed/|player.vimeo.com/video/)%"
14 | }
15 |
--------------------------------------------------------------------------------
/config/project/fields/hideFromNav--56f86cc6-5713-447f-8b10-e53f06ef42eb.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | contentColumnType: boolean
3 | handle: hideFromNav
4 | instructions: null
5 | name: 'Hide from Nav'
6 | searchable: false
7 | settings:
8 | default: false
9 | offLabel: null
10 | onLabel: null
11 | translationKeyFormat: null
12 | translationMethod: none
13 | type: craft\fields\Lightswitch
14 |
--------------------------------------------------------------------------------
/config/environment-label.php:
--------------------------------------------------------------------------------
1 | true,
6 | 'labelText' => getenv('ENVIRONMENT'),
7 | 'prefixText' => getenv('CRAFT_ENV_LABEL_PREFIX'),
8 | 'suffixText' => null,
9 | 'labelColor' => getenv('CRAFT_ENV_LABEL_COLOR'),
10 | 'textColor' => getenv('CRAFT_ENV_LABEL_TEXT_COLOR'),
11 | 'targetSelector' => '#global-header:before',
12 |
13 | ];
--------------------------------------------------------------------------------
/config/project/fields/enableNoticeBar--5489ed3b-28c1-4a26-ac7e-97b0182e6652.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: vgclrinn
2 | contentColumnType: boolean
3 | handle: enableNoticeBar
4 | instructions: null
5 | name: 'Enable Notice Bar'
6 | searchable: false
7 | settings:
8 | default: false
9 | offLabel: null
10 | onLabel: null
11 | translationKeyFormat: null
12 | translationMethod: site
13 | type: craft\fields\Lightswitch
14 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "configurations": [
3 | {
4 | "name": "Listen for Xdebug",
5 | "type": "php",
6 | "request": "launch",
7 | "hostname": "0.0.0.0",
8 | "port": 9003,
9 | "pathMappings": {
10 | "/var/www/html": "${workspaceFolder}"
11 | },
12 | "preLaunchTask": "DDEV: Enable Xdebug",
13 | "postDebugTask": "DDEV: Disable Xdebug"
14 | }
15 | ]
16 | }
--------------------------------------------------------------------------------
/src/js/app.js:
--------------------------------------------------------------------------------
1 | /* add javascript here */
2 |
3 | function stopVideo() {
4 | console.log('please stop');
5 | }
6 |
7 |
8 | // Change the second argument to your options:
9 | // https://github.com/sampotts/plyr/#options
10 | // const player = new Plyr('#player', {captions: {active: true}});
11 | const players = Plyr.setup('.js-player');
12 |
13 | // Expose player so it can be used from the console
14 | // window.player = player;
--------------------------------------------------------------------------------
/config/project/fields/embed--3b9496a7-4539-4c28-91bc-3e51c68f4187.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: buzbghct
2 | handle: embed
3 | instructions: null
4 | name: Embed
5 | searchable: false
6 | settings:
7 | byteLimit: null
8 | charLimit: null
9 | code: true
10 | initialRows: 3
11 | multiline: true
12 | placeholder: null
13 | uiMode: normal
14 | translationKeyFormat: null
15 | translationMethod: site
16 | type: craft\fields\PlainText
17 |
--------------------------------------------------------------------------------
/config/project/fields/input--c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: input
3 | instructions: null
4 | name: Input
5 | searchable: true
6 | settings:
7 | byteLimit: null
8 | charLimit: null
9 | code: false
10 | initialRows: 4
11 | multiline: false
12 | placeholder: null
13 | uiMode: normal
14 | translationKeyFormat: null
15 | translationMethod: site
16 | type: craft\fields\PlainText
17 |
--------------------------------------------------------------------------------
/templates/_whitelist.twig:
--------------------------------------------------------------------------------
1 | {#
2 | // insert any whitelisted classes that are part of the cms
3 | // and not the templates
4 | #}
5 |
6 | {# BACKGROUND COLORS - for styleguide #}
7 | bg-grayBrand-light
8 | bg-grayBrand
9 | bg-white
10 | bg-black
11 |
12 | {# - copy and paste below into dropdown field
13 | Top & bottom
14 | Top Only
15 | Bottom Only
16 | No Padding
17 | #}
18 | section-y-padding
19 | section-t-padding
20 | section-b-padding
21 | section-no-padding
--------------------------------------------------------------------------------
/templates/_user-guide/blocks/youtubeVideo.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% if block.videoTitle|length %}
5 |
{{ block.videoTitle }}
6 | {% endif %}
7 |
8 |
9 | {% set embedId = block.videoId %}
10 | VIDEO
11 |
12 |
13 |
--------------------------------------------------------------------------------
/config/project/ckeditor/configs/170a124d-5ba5-43f5-a663-8f85be97b38b.yaml:
--------------------------------------------------------------------------------
1 | headingLevels:
2 | - 1
3 | - 2
4 | - 3
5 | - 4
6 | - 5
7 | - 6
8 | name: Default
9 | options:
10 | code:
11 | indentSequence: ' '
12 | link:
13 | addTargetToExternalLinks: true
14 | toolbar:
15 | - sourceEditing
16 | - '|'
17 | - heading
18 | - '|'
19 | - blockQuote
20 | - codeBlock
21 | - bold
22 | - italic
23 | - bulletedList
24 | - numberedList
25 | - link
26 | - insertImage
27 | - mediaEmbed
28 |
--------------------------------------------------------------------------------
/templates/_blocks/codeEmbed.twig:
--------------------------------------------------------------------------------
1 | {# use block layout #}
2 | {% extends '_blocks/_layout' %}
3 |
4 | {% block templateComment %}
5 | {{ craft.app.config.general.devMode ? ('') | raw }}
6 | {% endblock %}
7 |
8 | {# section background #}
9 | {% set background = 'bg-gray-100' %}
10 |
11 | {% block body %}
12 |
13 | {% if block.sectionTitle|length %}
14 | {{ block.sectionTitle ?? "Video Block" }}
15 | {% endif %}
16 |
17 | {{ block.embed|raw }}
18 |
19 | {% endblock %}
--------------------------------------------------------------------------------
/templates/_blocks/hero/basicHero.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 | {# hero content #}
5 |
6 |
7 |
8 |
{{ block.heroTitle ?? entry.title }}
9 |
10 |
11 |
12 | {# end hero content #}
13 |
--------------------------------------------------------------------------------
/config/project/ckeditor/configs/3e09420e-30db-49dd-9520-4775f6667303.yaml:
--------------------------------------------------------------------------------
1 | headingLevels:
2 | - 1
3 | - 2
4 | - 3
5 | - 4
6 | - 5
7 | - 6
8 | name: 'Site Basic'
9 | options:
10 | code:
11 | indentSequence: ' '
12 | link:
13 | addTargetToExternalLinks: false
14 | decorators:
15 | openInNewTab:
16 | attributes:
17 | rel: 'noopener noreferrer'
18 | target: _blank
19 | label: 'Open in a new tab'
20 | mode: manual
21 | toolbar:
22 | - sourceEditing
23 | - bold
24 |
--------------------------------------------------------------------------------
/public/assets/images/svg/close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/_blocks/copy.twig:
--------------------------------------------------------------------------------
1 | {# use block layout #}
2 | {% extends '_blocks/_layout' %}
3 |
4 | {% block templateComment %}
5 | {{ craft.app.config.general.devMode ? ('') | raw }}
6 | {% endblock %}
7 |
8 | {# section background #}
9 | {% set background = 'bg-gray-50' %}
10 |
11 | {% block body %}
12 |
13 | {% if block.sectionTitle|length %}
14 | {{ block.sectionTitle }}
15 | {% endif %}
16 |
17 | {{ block.copy }}
18 |
19 |
20 | {% endblock %}
--------------------------------------------------------------------------------
/templates/pages/_entry-type/contactPage.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 | {# Hero #}
4 | {% include "_includes/hero" %}
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ entry.copy }}
12 |
13 |
14 |
15 |
16 | {# contact form #}
17 | {{ sprig('_components/contact-form') }}
18 | {# {% include "_includes/contact-form" %} #}
--------------------------------------------------------------------------------
/config/project/sections/userGuide--0784ad32-f952-40b1-9f6c-d0e67d502551.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - 475a351b-2442-4767-8ab6-1b39216d0c61 # User Guide
5 | handle: userGuide
6 | maxAuthors: 1
7 | name: 'User Guide'
8 | propagationMethod: all
9 | siteSettings:
10 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
11 | enabledByDefault: true
12 | hasUrls: true
13 | template: user-guide/_entry
14 | uriFormat: 'user-guide/{slug}'
15 | structure:
16 | maxLevels: null
17 | uid: a998bd9e-f13e-4af0-b105-e9cdf72d6151
18 | type: structure
19 |
--------------------------------------------------------------------------------
/bootstrap.php:
--------------------------------------------------------------------------------
1 | safeLoad();
18 | }
19 |
--------------------------------------------------------------------------------
/public/assets/css/cp-css.css:
--------------------------------------------------------------------------------
1 | .blocks .matrixblock:not(.collapsed) {
2 | transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
3 | }
4 | .blocks .matrixblock:not(.collapsed):focus-within {
5 | box-shadow: 10px 10px 70px 40px rgba(0, 0, 0, 0.42);
6 | z-index: 2;
7 | transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
8 | }
9 |
10 |
11 | /* native matrix */
12 | .matrixblock>.titlebar>.matrixblock-tabs .pane-tabs [role=tablist] [role=tab] {
13 | background:#b1cdef;
14 | }
15 | .pane-tabs [role=tablist] [role=tab].sel {
16 | background:#4b89d3 !important; /*#b1cdef*/
17 | color: #fff;
18 | }
--------------------------------------------------------------------------------
/config/project/fields/relatedEntries--5026b221-a48f-4868-9f48-07428068e77e.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: relatedEntries
3 | instructions: 'Select up to 3 entries'
4 | name: 'Related Entries'
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | branchLimit: null
9 | maintainHierarchy: false
10 | maxRelations: 3
11 | minRelations: 1
12 | selectionLabel: null
13 | showCardsInGrid: false
14 | showSiteMenu: false
15 | sources: '*'
16 | targetSiteId: null
17 | validateRelatedElements: false
18 | viewMode: list
19 | translationKeyFormat: null
20 | translationMethod: site
21 | type: craft\fields\Entries
22 |
--------------------------------------------------------------------------------
/config/project/fields/fragment--aac80dd6-df34-4cd2-a92f-14debb37b911.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: fragment
3 | instructions: null
4 | name: Fragment
5 | searchable: true
6 | settings:
7 | allowSelfRelations: false
8 | branchLimit: null
9 | maintainHierarchy: false
10 | maxRelations: null
11 | minRelations: 1
12 | selectionLabel: null
13 | showCardsInGrid: false
14 | showSiteMenu: false
15 | sources:
16 | - 'section:ce27286a-7635-4494-9c9c-77f2d73352f4' # Fragments
17 | targetSiteId: null
18 | validateRelatedElements: false
19 | viewMode: list
20 | translationKeyFormat: null
21 | translationMethod: site
22 | type: craft\fields\Entries
23 |
--------------------------------------------------------------------------------
/templates/_blocks/_layout.twig:
--------------------------------------------------------------------------------
1 | {# section background #}
2 | {% set background = background ?? 'bg-white' %}
3 |
4 | {% block templateComment %}{% endblock %}
5 |
6 | {# reveal blocks when they are 200px into the viewport #}
7 |
13 |
14 |
15 | {% block body %}{% endblock %}
16 |
17 |
18 |
--------------------------------------------------------------------------------
/config/project/fields/copyBasic--da3d7ec4-1d85-47ba-a517-6c81d94cc9d2.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: copyBasic
3 | instructions: null
4 | name: 'Copy Basic'
5 | searchable: true
6 | settings:
7 | availableTransforms: ''
8 | availableVolumes: '*'
9 | ckeConfig: 3e09420e-30db-49dd-9520-4775f6667303 # Site Basic
10 | createButtonLabel: null
11 | defaultTransform: null
12 | purifierConfig: null
13 | purifyHtml: true
14 | showUnpermittedFiles: false
15 | showUnpermittedVolumes: false
16 | showWordCount: true
17 | sourceEditingGroups:
18 | - __ADMINS__
19 | wordLimit: null
20 | translationKeyFormat: null
21 | translationMethod: site
22 | type: craft\ckeditor\Field
23 |
--------------------------------------------------------------------------------
/config/knock-knock.php:
--------------------------------------------------------------------------------
1 | [
5 | 'enabled' => false,
6 | 'loginPath' => 'knock-knock',
7 | //'template' => '',
8 | //'forcedRedirect' => '',
9 | 'password' => 'letmein',
10 | //'siteSettings' => [],
11 |
12 | //'checkInvalidLogins' => false,
13 | // 'invalidLoginWindowDuration' => '3600',
14 | // 'maxInvalidLogins' => 10,
15 | // 'allowIps' => '',
16 | // 'denyIps' => '',
17 | // 'useRemoteIp' => false,
18 |
19 | // 'protectedUrls' => '',
20 | // 'unprotectedUrls' => '',
21 | ],
22 | 'staging' => [
23 | 'enabled' => true,
24 | ],
25 | ];
--------------------------------------------------------------------------------
/config/project/fields/userGuide--d974bf8d-647d-45f3-98be-0733d5e3e1ba.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | contentColumnType: string
3 | handle: userGuide
4 | instructions: null
5 | name: 'User Guide'
6 | searchable: false
7 | settings:
8 | entryTypes:
9 | - 0187ae10-82fa-43e8-ac5c-e8fa4f2e3b29 # Copy (user guide)
10 | - 4427e835-20ed-496b-9469-831bb0882185
11 | - a399fb79-90a6-48a0-be1f-38d2b8a81af5 # Video (user guide)
12 | - c4527788-b877-44f3-9a2d-071f696877fa # YouTube Video (user guide)
13 | maxEntries: null
14 | minEntries: null
15 | propagationKeyFormat: null
16 | propagationMethod: all
17 | viewMode: blocks
18 | translationKeyFormat: null
19 | translationMethod: site
20 | type: craft\fields\Matrix
21 |
--------------------------------------------------------------------------------
/templates/_user-guide/_entry.twig:
--------------------------------------------------------------------------------
1 |
2 | {% include '_user-guide/styles' %}
3 |
4 |
12 |
13 | {% for block in entry.userGuide.all() %}
14 | {% include '_user-guide/blocks/' ~ block.type %}
15 | {% endfor %}
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/config/project/fields/copy--f90a85bd-91b2-462b-acb4-8f265ded647e.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: mevzfsyi
2 | contentColumnType: text
3 | handle: copy
4 | instructions: null
5 | name: Copy
6 | searchable: true
7 | settings:
8 | availableTransforms: ''
9 | availableVolumes:
10 | - 70f5d47b-4830-4d51-95fe-bc0f7ccc0670 # Uploads
11 | ckeConfig: 12f17257-6f1c-4e4c-837e-17ad76241a60 # Site
12 | columnType: text
13 | defaultTransform: null
14 | enableSourceEditingForNonAdmins: false
15 | purifierConfig: null
16 | purifyHtml: true
17 | showUnpermittedFiles: false
18 | showUnpermittedVolumes: false
19 | showWordCount: true
20 | wordLimit: null
21 | translationKeyFormat: null
22 | translationMethod: site
23 | type: craft\ckeditor\Field
24 |
--------------------------------------------------------------------------------
/config/routes.php:
--------------------------------------------------------------------------------
1 | ' => ['template' => 'blog/_archive'],
15 | *
16 | * That example would match URIs such as `/blog/archive/2012`, and pass the
17 | * request along to the `blog/_archive` template, providing it a `year` variable
18 | * set to the value `2012`.
19 | */
20 |
21 | return [
22 |
23 | ];
24 |
--------------------------------------------------------------------------------
/templates/pages/_entry-type/newsListing.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 |
{{ entry.title ?? category.title }}
7 |
8 |
9 |
10 |
11 | {# make blog pagination reactive with sprig #}
12 |
13 | {{ sprig('_components/news-listing', { 'limit':6}) }}
14 |
15 |
--------------------------------------------------------------------------------
/config/project/fields/slides--8c583e9a-a56d-486d-8550-e7eae61c8088.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: slides
3 | instructions: null
4 | name: Slides
5 | searchable: true
6 | settings:
7 | createButtonLabel: null
8 | defaultIndexViewMode: cards
9 | enableVersioning: false
10 | entryTypes:
11 | -
12 | __assoc__:
13 | -
14 | - uid
15 | - d399ecfb-7ec8-47d8-84ed-b8447e779a67 # Slide
16 | -
17 | - group
18 | - General
19 | includeTableView: false
20 | maxEntries: 5
21 | minEntries: null
22 | pageSize: 50
23 | propagationKeyFormat: null
24 | propagationMethod: none
25 | showCardsInGrid: false
26 | viewMode: cards
27 | translationKeyFormat: null
28 | translationMethod: site
29 | type: craft\fields\Matrix
30 |
--------------------------------------------------------------------------------
/src/img/svg/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/config/app.php:
--------------------------------------------------------------------------------
1 | App::env('CRAFT_APP_ID') ?: 'CraftCMS',
24 | ];
25 |
--------------------------------------------------------------------------------
/config/db.php:
--------------------------------------------------------------------------------
1 | App::env('DB_DSN') ?: null,
15 | 'driver' => App::env('DB_DRIVER'),
16 | 'server' => App::env('DB_SERVER'),
17 | 'port' => App::env('DB_PORT'),
18 | 'database' => App::env('DB_DATABASE'),
19 | 'user' => App::env('DB_USER'),
20 | 'password' => App::env('DB_PASSWORD'),
21 | 'schema' => App::env('DB_SCHEMA'),
22 | 'tablePrefix' => App::env('DB_TABLE_PREFIX'),
23 | 'charset' => 'utf8',
24 | 'collation' => 'utf8_unicode_ci',
25 | ];
26 |
--------------------------------------------------------------------------------
/public/assets/images/svg/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/config/project/fields/newsCategories--fbdde691-0df2-4e8e-b1a8-61a1f555fd0e.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: newsCategories
3 | instructions: null
4 | name: 'News Categories'
5 | searchable: true
6 | settings:
7 | allowSelfRelations: false
8 | branchLimit: null
9 | defaultPlacement: end
10 | maintainHierarchy: true
11 | maxRelations: null
12 | minRelations: null
13 | selectionLabel: null
14 | showCardsInGrid: false
15 | showSearchInput: true
16 | showSiteMenu: false
17 | showUnpermittedEntries: true
18 | showUnpermittedSections: true
19 | sources:
20 | - 'section:4b342e70-0223-4c29-9237-86a023f74f1b' # News Categories
21 | targetSiteId: null
22 | validateRelatedElements: false
23 | viewMode: list
24 | translationKeyFormat: null
25 | translationMethod: site
26 | type: craft\fields\Entries
27 |
--------------------------------------------------------------------------------
/config/project/fields/noticeBarLocation--52f12f1b-ba11-48f3-985d-0ee6e2a6dc4e.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: kjjdtixf
2 | contentColumnType: string
3 | handle: noticeBarLocation
4 | instructions: null
5 | name: 'Notice Bar Location'
6 | searchable: false
7 | settings:
8 | columnType: string
9 | options:
10 | -
11 | __assoc__:
12 | -
13 | - label
14 | - 'Home Page Only'
15 | -
16 | - value
17 | - homePageOnly
18 | -
19 | - default
20 | - '1'
21 | -
22 | __assoc__:
23 | -
24 | - label
25 | - 'All Pages'
26 | -
27 | - value
28 | - allPages
29 | -
30 | - default
31 | - ''
32 | translationKeyFormat: null
33 | translationMethod: site
34 | type: craft\fields\Dropdown
35 |
--------------------------------------------------------------------------------
/config/project/globalSets/fallback--415a954c-eb55-4533-9ffd-64b3eade9469.yaml:
--------------------------------------------------------------------------------
1 | fieldLayouts:
2 | f2c9fa24-b4e1-4a9b-ada3-9fdf262363ca:
3 | tabs:
4 | -
5 | elementCondition: null
6 | elements:
7 | -
8 | elementCondition: null
9 | fieldUid: 12c7de12-987a-4aa4-890f-ec5cde880851 # Fallback Image
10 | instructions: null
11 | label: null
12 | required: false
13 | tip: null
14 | type: craft\fieldlayoutelements\CustomField
15 | uid: 76442d36-9051-4053-bbc2-7da82de91b97
16 | userCondition: null
17 | warning: null
18 | width: 100
19 | name: Content
20 | uid: 17fe967b-d017-46eb-9f6b-84851017ec41
21 | userCondition: null
22 | handle: fallback
23 | name: Fallback
24 | sortOrder: 1
25 |
--------------------------------------------------------------------------------
/config/project/sections/error404--29d88d99-dd38-43f6-9ac5-3438833c75ba.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - b312d78c-b490-46da-aeff-70a1be5a5505 # Error 404
5 | handle: error404
6 | maxAuthors: 1
7 | name: 'Error 404'
8 | previewTargets:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Primary entry page'
14 | -
15 | - urlFormat
16 | - '{url}'
17 | -
18 | - refresh
19 | - '1'
20 | propagationMethod: all
21 | siteSettings:
22 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
23 | enabledByDefault: true
24 | hasUrls: false
25 | template: null
26 | uriFormat: null
27 | b9fdef79-5b63-4932-a9aa-8d18f937e6d9: # Français
28 | enabledByDefault: true
29 | hasUrls: false
30 | template: null
31 | uriFormat: null
32 | type: single
33 |
--------------------------------------------------------------------------------
/config/project/sections/fragments--ce27286a-7635-4494-9c9c-77f2d73352f4.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - c166cd47-6f64-49e0-b33d-6aceadb3fcc3 # Fragments
5 | handle: fragments
6 | maxAuthors: 1
7 | name: Fragments
8 | previewTargets:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Primary entry page'
14 | -
15 | - urlFormat
16 | - '{url}'
17 | -
18 | - refresh
19 | - '1'
20 | propagationMethod: all
21 | siteSettings:
22 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
23 | enabledByDefault: true
24 | hasUrls: false
25 | template: null
26 | uriFormat: null
27 | b9fdef79-5b63-4932-a9aa-8d18f937e6d9: # Français
28 | enabledByDefault: true
29 | hasUrls: false
30 | template: null
31 | uriFormat: null
32 | type: channel
33 |
--------------------------------------------------------------------------------
/config/project/sections/noticeBar--408314ae-e32d-471b-a729-25f4ce759ac4.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - 5bca37e0-a30f-48fd-9fde-3105fb9d9738 # Notice Bar
5 | handle: noticeBar
6 | maxAuthors: 1
7 | name: 'Notice Bar'
8 | previewTargets:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Primary entry page'
14 | -
15 | - urlFormat
16 | - '{url}'
17 | -
18 | - refresh
19 | - '1'
20 | propagationMethod: all
21 | siteSettings:
22 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
23 | enabledByDefault: true
24 | hasUrls: false
25 | template: null
26 | uriFormat: null
27 | b9fdef79-5b63-4932-a9aa-8d18f937e6d9: # Français
28 | enabledByDefault: true
29 | hasUrls: false
30 | template: null
31 | uriFormat: null
32 | type: single
33 |
--------------------------------------------------------------------------------
/config/project/sections/news--9c12e5ad-18e9-498f-bf50-489513409007.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - 51b9c3fc-be2a-4ef3-9f2c-66372327c604 # News
5 | handle: news
6 | maxAuthors: 1
7 | name: News
8 | previewTargets:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Primary entry page'
14 | -
15 | - urlFormat
16 | - '{url}'
17 | -
18 | - refresh
19 | - '1'
20 | propagationMethod: all
21 | siteSettings:
22 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
23 | enabledByDefault: true
24 | hasUrls: true
25 | template: news/_entry
26 | uriFormat: 'news/{slug}'
27 | b9fdef79-5b63-4932-a9aa-8d18f937e6d9: # Français
28 | enabledByDefault: true
29 | hasUrls: true
30 | template: news/_entry
31 | uriFormat: 'news/{slug}'
32 | type: channel
33 |
--------------------------------------------------------------------------------
/config/project/fields/seo--149ec41c-d6de-4ae5-84db-08d285801dd1.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: seo
3 | instructions: null
4 | name: SEO
5 | searchable: false
6 | settings:
7 | elementDisplayPreviewType: google
8 | facebookEnabledFields:
9 | - seoPreview
10 | - ogTitle
11 | - ogDescription
12 | - ogImage
13 | facebookTabEnabled: '1'
14 | generalEnabledFields:
15 | - seoPreview
16 | - seoTitle
17 | - seoDescription
18 | - seoImage
19 | generalTabEnabled: '1'
20 | sitemapEnabledFields:
21 | - sitemapUrls
22 | - sitemapChangeFreq
23 | - sitemapPriority
24 | sitemapTabEnabled: '1'
25 | twitterEnabledFields:
26 | - seoPreview
27 | - twitterTitle
28 | - twitterDescription
29 | - twitterImage
30 | twitterTabEnabled: '1'
31 | translationKeyFormat: null
32 | translationMethod: site
33 | type: nystudio107\seomatic\fields\SeoSettings
34 |
--------------------------------------------------------------------------------
/src/img/svg/chevron-double-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/img/svg/chevron-double-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/config/project/fields/hero--ab8abc7e-2a4d-4858-98ea-9a6954a434da.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: hero
3 | instructions: null
4 | name: Hero
5 | searchable: true
6 | settings:
7 | createButtonLabel: null
8 | defaultIndexViewMode: cards
9 | entryTypes:
10 | -
11 | __assoc__:
12 | -
13 | - uid
14 | - 120a7750-0967-496d-9315-bba6d83eb4b1 # Standard Hero
15 | -
16 | __assoc__:
17 | -
18 | - uid
19 | - 323e9af3-aa75-4f1c-82eb-370e40179f41 # Slider Hero
20 | -
21 | __assoc__:
22 | -
23 | - uid
24 | - b4d947dc-370e-4404-807b-b165534a1503
25 | includeTableView: false
26 | maxEntries: 1
27 | minEntries: 1
28 | pageSize: null
29 | propagationKeyFormat: null
30 | propagationMethod: none
31 | showCardsInGrid: false
32 | viewMode: blocks
33 | translationKeyFormat: null
34 | translationMethod: site
35 | type: craft\fields\Matrix
36 |
--------------------------------------------------------------------------------
/templates/_blocks/callToAction.twig:
--------------------------------------------------------------------------------
1 | {# use block layout #}
2 | {% extends '_blocks/_layout' %}
3 |
4 | {% block templateComment %}
5 | {{ craft.app.config.general.devMode ? ('') | raw }}
6 | {% endblock %}
7 |
8 | {# section background #}
9 | {% set background = 'bg-gray-100' %}
10 |
11 | {% block body %}
12 |
13 |
14 | {% if block.sectionTitle|length %}
15 |
{{ block.sectionTitle }}
16 | {% endif %}
17 | {{ block.button.getLink({
18 | class: 'btn',
19 | }) }}
20 |
21 | {#
22 | {{ tag('a', {
23 | text: block.buttonText ?? block.button.label,
24 | href: block.button
25 | })|attr({
26 | class: 'btn',
27 | target: block.openInNewTab =='1' ? '_blank' : '_self'
28 | }) }}
29 | #}
30 |
31 |
32 | {% endblock %}
33 |
--------------------------------------------------------------------------------
/public/assets/images/svg/chevron-double-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/public/assets/images/svg/chevron-double-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/browsersync.config.js:
--------------------------------------------------------------------------------
1 | const homedir = require('os').homedir();
2 |
3 | /*
4 | everything works fine, but https is not working and nothing I do seems to fix it
5 | */
6 |
7 | module.exports = {
8 | proxy: 'https://craft-starter.ddev.site',
9 | host: '0.0.0.0',
10 | files: [
11 | './templates/**/*.{html,twig}',
12 | './src/**/*.{css,js}',
13 | './public/**/*.{css,js}'
14 | ],
15 | // https:true,
16 | /*
17 | ? SSL-enabled for DDev. You have to copy the SSL cert to somewhere outside of Docker first. Run this at your project root:
18 | docker cp ddev-router:/etc/nginx/certs ~/tmp/DOMAIN-WITH-EXTENSION
19 | (From: https://stackoverflow.com/questions/59730898/cant-connect-browsersync-with-ddev-nginx-server-because-ssl-error):
20 | */
21 | https: {
22 | key: homedir + "/tmp/certs/master.key",
23 | cert: homedir + "/tmp/certs/master.crt"
24 | },
25 | secure: true,
26 | ui: false,
27 | open: 'local',
28 | notify: false,
29 | };
--------------------------------------------------------------------------------
/config/project/sections/pages--666b31c2-d6d5-4e80-b9aa-f57b66d5b54a.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - 4116f227-348c-4509-bc7a-6767a28fd40c # Contact Page
5 | - bb838d9b-476f-487c-8cc2-8e01b9423d92 # Pages
6 | - e3dea9df-426f-43a5-96fd-927882533aa9 # News Listing
7 | - ea7fe716-adee-4200-a8ca-15362418cd97 # Home
8 | handle: pages
9 | maxAuthors: 1
10 | name: Pages
11 | previewTargets:
12 | -
13 | __assoc__:
14 | -
15 | - label
16 | - 'Primary entry page'
17 | -
18 | - urlFormat
19 | - '{url}'
20 | -
21 | - refresh
22 | - '1'
23 | propagationMethod: all
24 | siteSettings:
25 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
26 | enabledByDefault: true
27 | hasUrls: true
28 | template: pages/_entry
29 | uriFormat: '{parent.uri}/{slug}'
30 | structure:
31 | maxLevels: null
32 | uid: 536c7846-2d54-4625-a65d-1a546df44223
33 | type: structure
34 |
--------------------------------------------------------------------------------
/templates/404.twig:
--------------------------------------------------------------------------------
1 | {# homepage #}
2 | {% extends '_layout' %}
3 |
4 |
5 | {% set env = getenv('ENVIRONMENT') %}
6 | {% if env == 'production' %}
7 | {% block criticalCss %}
8 |
11 | {% endblock %}
12 | {% endif %}
13 |
14 | {% set entry = craft.entries.section('error404').one() %}
15 |
16 | {% block content %}
17 |
18 | {# hero block #}
19 | {# {% include '_includes/split-hero' %} #}
20 | {# end hero block #}
21 |
22 |
23 |
24 |
25 |
26 |
{{ entry.title }}
27 |
28 |
29 | {{ entry.text }}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | {% endblock %}
--------------------------------------------------------------------------------
/config/project/sections/newsCategories--4b342e70-0223-4c29-9237-86a023f74f1b.yaml:
--------------------------------------------------------------------------------
1 | defaultPlacement: end
2 | enableVersioning: true
3 | entryTypes:
4 | - ef488e30-b35e-4bf8-87a3-34f0f76b622f # News Categories
5 | handle: newsCategories
6 | maxAuthors: 1
7 | name: 'News Categories'
8 | previewTargets:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Primary entry page'
14 | -
15 | - urlFormat
16 | - '{url}'
17 | propagationMethod: all
18 | siteSettings:
19 | 1a78d395-d81a-4b77-8da7-30a49123bbee: # English
20 | enabledByDefault: true
21 | hasUrls: true
22 | template: pages/_news-category.twig
23 | uriFormat: 'news/category/{slug}'
24 | b9fdef79-5b63-4932-a9aa-8d18f937e6d9: # Français
25 | enabledByDefault: true
26 | hasUrls: true
27 | template: pages/_news-category.twig
28 | uriFormat: 'news/category/{slug}'
29 | structure:
30 | maxLevels: null
31 | uid: 6defae27-bbfa-4841-9096-f69c8b9f8e75
32 | type: structure
33 |
--------------------------------------------------------------------------------
/config/project/ckeditor/configs/12f17257-6f1c-4e4c-837e-17ad76241a60.yaml:
--------------------------------------------------------------------------------
1 | headingLevels:
2 | - 2
3 | - 3
4 | name: Site
5 | options:
6 | code:
7 | indentSequence: ' '
8 | link:
9 | addTargetToExternalLinks: false
10 | decorators:
11 | openInNewTab:
12 | attributes:
13 | rel: 'noopener noreferrer'
14 | target: _blank
15 | label: 'Open in a new tab'
16 | mode: manual
17 | style:
18 | definitions:
19 | -
20 | classes:
21 | - mb-20
22 | element: span
23 | name: 'Extra Bottom Margin'
24 | -
25 | classes:
26 | - mt-1
27 | - mb-0
28 | - leading-tight
29 | element: p
30 | name: 'Tight Paragraphs'
31 | toolbar:
32 | - sourceEditing
33 | - '|'
34 | - heading
35 | - '|'
36 | - style
37 | - '|'
38 | - bold
39 | - italic
40 | - bulletedList
41 | - numberedList
42 | - outdent
43 | - indent
44 | - link
45 | - alignment
46 |
--------------------------------------------------------------------------------
/templates/sitemap.twig:
--------------------------------------------------------------------------------
1 | {# homepage
2 |
3 | home page template is at pages/_entry-type/home
4 |
5 | #}
6 | {% extends '_layout' %}
7 |
8 | {% set entry = craft.entries.slug('__home__').one() %}
9 |
10 | {% block content %}
11 |
12 |
13 |
14 |
Site Map
15 |
16 |
17 | {# pages channel #}
18 | {% set pages = craft.entries.section('pages').hideFromNav('0').collect() %}
19 | {% nav entry in pages %}
20 |
21 | {{ entry.title }}
22 |
23 | {% ifchildren %}
24 |
27 | {% endifchildren %}
28 |
29 | {% endnav %}
30 |
31 |
32 |
33 |
34 |
35 |
36 | {% endblock %}
--------------------------------------------------------------------------------
/src/img/svg/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/public/assets/images/svg/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/config/project/fields/image2--7bf7da79-8f7d-4a1b-8129-121b24c0d99b.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: image2
3 | instructions: null
4 | name: 'Hero Image'
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: true
10 | allowedKinds: null
11 | branchLimit: null
12 | defaultUploadLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
13 | defaultUploadLocationSubpath: null
14 | maintainHierarchy: false
15 | maxRelations: 1
16 | minRelations: null
17 | previewMode: full
18 | restrictFiles: false
19 | restrictLocation: true
20 | restrictedDefaultUploadSubpath: null
21 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
22 | restrictedLocationSubpath: hero
23 | selectionLabel: null
24 | showCardsInGrid: false
25 | showSiteMenu: false
26 | showUnpermittedFiles: false
27 | showUnpermittedVolumes: false
28 | sources: '*'
29 | targetSiteId: null
30 | validateRelatedElements: false
31 | viewMode: large
32 | translationKeyFormat: null
33 | translationMethod: site
34 | type: craft\fields\Assets
35 |
--------------------------------------------------------------------------------
/config/project/fields/image--b2f53aa5-81a3-466c-af2d-e30dab4ed3d8.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: image
3 | instructions: null
4 | name: Image
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: true
10 | allowedKinds:
11 | - image
12 | branchLimit: null
13 | defaultUploadLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
14 | defaultUploadLocationSubpath: null
15 | maintainHierarchy: false
16 | maxRelations: null
17 | minRelations: null
18 | previewMode: full
19 | restrictFiles: true
20 | restrictLocation: false
21 | restrictedDefaultUploadSubpath: null
22 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
23 | restrictedLocationSubpath: null
24 | selectionLabel: null
25 | showCardsInGrid: false
26 | showSiteMenu: false
27 | showUnpermittedFiles: false
28 | showUnpermittedVolumes: false
29 | sources: '*'
30 | targetSiteId: null
31 | validateRelatedElements: false
32 | viewMode: large
33 | translationKeyFormat: null
34 | translationMethod: site
35 | type: craft\fields\Assets
36 |
--------------------------------------------------------------------------------
/templates/_includes/language-switcher.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 | {# https://craftcms.stackexchange.com/a/14306/193 #}
5 |
6 | {% set currentLanguage = currentSite.language %}
7 |
8 | {# Decide which languages should be omitted from language links #}
9 | {% set languageExceptions = currentSite.language %}
10 | {% set otherLocales = craft.app.sites.getAllSites() %}
11 |
12 |
13 | {% for site in otherLocales %}
14 | {% if site.id != currentSite.id %}
15 | {% if entry is defined %}
16 | {% set localeEntry = craft.entries.id(entry.id).siteId(site.id).one() %}
17 |
18 | {% elseif event is defined %}
19 | {% set localeEntry = craft.calendar.event(event.id) %}
20 | {% else %}
21 | {# homepage #}
22 | {% set localeEntry = craft.entries.id('2').siteId(site.id).one() %}
23 | {% endif %}
24 |
25 | {% if localeEntry.siteId is defined %}
26 | {# build url for events page #}
27 |
28 | {{ site.name }}
29 |
30 | {% endif %}
31 | {% endif %}
32 | {% endfor %}
--------------------------------------------------------------------------------
/config/project/fields/screenshots--25e2157e-9a82-41cd-970f-4fc58cb3a835.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: screenshots
3 | instructions: null
4 | name: Screenshots
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: true
10 | allowedKinds:
11 | - image
12 | branchLimit: null
13 | defaultUploadLocationSource: 'volume:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
14 | defaultUploadLocationSubpath: null
15 | maintainHierarchy: false
16 | maxRelations: 1
17 | minRelations: null
18 | previewMode: full
19 | restrictFiles: true
20 | restrictLocation: false
21 | restrictedDefaultUploadSubpath: null
22 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
23 | restrictedLocationSubpath: null
24 | selectionLabel: null
25 | showCardsInGrid: false
26 | showSiteMenu: true
27 | showUnpermittedFiles: false
28 | showUnpermittedVolumes: false
29 | sources:
30 | - 'volume:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
31 | targetSiteId: null
32 | validateRelatedElements: false
33 | viewMode: large
34 | translationKeyFormat: null
35 | translationMethod: site
36 | type: craft\fields\Assets
37 |
--------------------------------------------------------------------------------
/config/project/fields/listingImage--c33fedfd-ec76-45db-93dc-a12697e4a2aa.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: listingImage
3 | instructions: null
4 | name: 'Listing Image'
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: false
10 | allowedKinds:
11 | - image
12 | branchLimit: null
13 | defaultUploadLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
14 | defaultUploadLocationSubpath: null
15 | maintainHierarchy: false
16 | maxRelations: 1
17 | minRelations: null
18 | previewMode: full
19 | restrictFiles: true
20 | restrictLocation: false
21 | restrictedDefaultUploadSubpath: null
22 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
23 | restrictedLocationSubpath: null
24 | selectionLabel: null
25 | showCardsInGrid: false
26 | showSiteMenu: false
27 | showUnpermittedFiles: false
28 | showUnpermittedVolumes: false
29 | sources:
30 | - 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
31 | targetSiteId: null
32 | validateRelatedElements: false
33 | viewMode: large
34 | translationKeyFormat: null
35 | translationMethod: site
36 | type: craft\fields\Assets
37 |
--------------------------------------------------------------------------------
/config/project/fields/videoUpload--6f74be98-1b1b-470e-a96a-727b01e0b225.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: videoUpload
3 | instructions: null
4 | name: 'Video Upload'
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: true
10 | allowedKinds:
11 | - video
12 | branchLimit: null
13 | defaultUploadLocationSource: 'volume:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
14 | defaultUploadLocationSubpath: null
15 | maintainHierarchy: false
16 | maxRelations: 1
17 | minRelations: null
18 | previewMode: full
19 | restrictFiles: true
20 | restrictLocation: false
21 | restrictedDefaultUploadSubpath: null
22 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
23 | restrictedLocationSubpath: null
24 | selectionLabel: null
25 | showCardsInGrid: false
26 | showSiteMenu: true
27 | showUnpermittedFiles: false
28 | showUnpermittedVolumes: false
29 | sources:
30 | - 'volume:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
31 | targetSiteId: null
32 | validateRelatedElements: false
33 | viewMode: list
34 | translationKeyFormat: null
35 | translationMethod: site
36 | type: craft\fields\Assets
37 |
--------------------------------------------------------------------------------
/config/project/fields/backgroundImage--cc618569-5c0e-4ff7-9b4a-2fe9ed27af1f.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: backgroundImage
3 | instructions: null
4 | name: 'Background Image'
5 | searchable: false
6 | settings:
7 | allowSelfRelations: false
8 | allowSubfolders: false
9 | allowUploads: true
10 | allowedKinds:
11 | - image
12 | branchLimit: null
13 | defaultUploadLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
14 | defaultUploadLocationSubpath: null
15 | maintainHierarchy: false
16 | maxRelations: 1
17 | minRelations: null
18 | previewMode: full
19 | restrictFiles: true
20 | restrictLocation: false
21 | restrictedDefaultUploadSubpath: null
22 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
23 | restrictedLocationSubpath: null
24 | selectionLabel: null
25 | showCardsInGrid: false
26 | showSiteMenu: false
27 | showUnpermittedFiles: false
28 | showUnpermittedVolumes: false
29 | sources:
30 | - 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
31 | targetSiteId: null
32 | validateRelatedElements: false
33 | viewMode: list
34 | translationKeyFormat: null
35 | translationMethod: site
36 | type: craft\fields\Assets
37 |
--------------------------------------------------------------------------------
/src/img/svg/close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/config/project/fields/padding--127f0d67-cfaf-4e5d-b3f8-111b7fda6f64.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: mjnbzisp
2 | handle: padding
3 | instructions: null
4 | name: Padding
5 | searchable: false
6 | settings:
7 | customOptions: false
8 | options:
9 | -
10 | __assoc__:
11 | -
12 | - label
13 | - 'Top & bottom'
14 | -
15 | - value
16 | - section-y-padding
17 | -
18 | - default
19 | - '1'
20 | -
21 | __assoc__:
22 | -
23 | - label
24 | - 'Top Only'
25 | -
26 | - value
27 | - section-t-padding
28 | -
29 | - default
30 | - ''
31 | -
32 | __assoc__:
33 | -
34 | - label
35 | - 'Bottom Only'
36 | -
37 | - value
38 | - section-b-padding
39 | -
40 | - default
41 | - ''
42 | -
43 | __assoc__:
44 | -
45 | - label
46 | - 'No Padding'
47 | -
48 | - value
49 | - section-no-padding
50 | -
51 | - default
52 | - ''
53 | translationKeyFormat: null
54 | translationMethod: site
55 | type: craft\fields\Dropdown
56 |
--------------------------------------------------------------------------------
/config/project/fields/fallbackImage--12c7de12-987a-4aa4-890f-ec5cde880851.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | contentColumnType: string
3 | handle: fallbackImage
4 | instructions: null
5 | name: 'Fallback Image'
6 | searchable: false
7 | settings:
8 | allowSelfRelations: false
9 | allowSubfolders: false
10 | allowUploads: true
11 | allowedKinds:
12 | - image
13 | branchLimit: null
14 | defaultUploadLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
15 | defaultUploadLocationSubpath: null
16 | localizeRelations: true
17 | maintainHierarchy: false
18 | maxRelations: 1
19 | minRelations: null
20 | previewMode: full
21 | restrictFiles: true
22 | restrictLocation: false
23 | restrictedDefaultUploadSubpath: null
24 | restrictedLocationSource: 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
25 | restrictedLocationSubpath: null
26 | selectionLabel: null
27 | showSiteMenu: false
28 | showUnpermittedFiles: false
29 | showUnpermittedVolumes: false
30 | sources:
31 | - 'volume:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
32 | targetSiteId: null
33 | validateRelatedElements: false
34 | viewMode: large
35 | translationKeyFormat: null
36 | translationMethod: site
37 | type: craft\fields\Assets
38 |
--------------------------------------------------------------------------------
/config/project/entryTypes/basicHero--b4d947dc-370e-4404-807b-b165534a1503.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | dc49b215-dcb8-4177-9ecd-36ece2b038a7:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | dateAdded: '2025-01-27T11:45:28-05:00'
10 | elementCondition: null
11 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
12 | handle: heroTitle
13 | includeInCards: true
14 | instructions: 'If empty page title will be used'
15 | label: 'Hero Title'
16 | providesThumbs: false
17 | required: false
18 | tip: null
19 | type: craft\fieldlayoutelements\CustomField
20 | uid: 2d611c9f-ce5d-4fb3-89b7-6cbbac684b4a
21 | userCondition: null
22 | warning: null
23 | width: 100
24 | name: Content
25 | uid: eaada003-5ead-470a-9054-8417d845e9be
26 | userCondition: null
27 | handle: basicHero
28 | hasTitleField: false
29 | icon: null
30 | name: 'Basic Hero'
31 | showSlugField: true
32 | showStatusField: true
33 | slugTranslationKeyFormat: null
34 | slugTranslationMethod: site
35 | titleFormat: null
36 | titleTranslationKeyFormat: null
37 | titleTranslationMethod: site
38 |
--------------------------------------------------------------------------------
/public/web.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/config/project/entryTypes/fragmentBlock--48d0d0b8-2e48-4232-8b09-a401c6493902.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 9a7c5f55-c3f5-4e6e-9066-4cae24a1e8fc:
4 | cardView:
5 | - 'layoutElement:36176e49-f347-4d1d-9c9f-43876e808579'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T17:15:33+00:00'
12 | elementCondition: null
13 | fieldUid: aac80dd6-df34-4cd2-a92f-14debb37b911 # Fragment
14 | handle: null
15 | includeInCards: true
16 | instructions: null
17 | label: Fragment
18 | providesThumbs: false
19 | required: true
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: 36176e49-f347-4d1d-9c9f-43876e808579
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | name: Content
27 | uid: 9ac485a3-5145-4704-b46f-add6c7126e86
28 | userCondition: null
29 | handle: fragmentBlock
30 | hasTitleField: false
31 | icon: puzzle-piece
32 | name: 'Fragment Block'
33 | showSlugField: true
34 | showStatusField: true
35 | slugTranslationKeyFormat: null
36 | slugTranslationMethod: site
37 | titleFormat: null
38 | titleTranslationKeyFormat: null
39 | titleTranslationMethod: site
40 |
--------------------------------------------------------------------------------
/templates/_macros.twig:
--------------------------------------------------------------------------------
1 | {% macro emailLinks(text, class) %}
2 | {# v1 #}
3 | {% apply spaceless %}
4 | {% set text = text|replace('/([a-zA-Z0-9_.+-]+)+@([a-zA-Z0-9-]+.[a-zA-Z]+)/', ''~ '\\1@\\2' ~' ') %}
5 | {{text|raw}}
6 | {% endapply %}
7 | {% endmacro %}
8 | {# {{ macros.emailLinks("me@domain.com", "className") }} #}
9 |
10 | {# active segment #}
11 | {% macro is_active(segment) %}
12 | {% if craft.app.request.segments | first == segment %}
13 | active
14 | {% endif %}
15 | {% endmacro %}
16 |
17 |
18 | {#
19 | # Phone Number formatter
20 | # strip - . () and spaces from phone numbers
21 | # outputs a tel: link
22 | # @param {phoneNumber}
23 | # @param {className} - optional
24 | # currently untested
25 | #}
26 | {% macro phone(phoneNumber, className) %}
27 | {{ phoneNumber }}
28 | {% endmacro %}
29 | {# {{ macros.phone('1-705-000.0000', 'no-underline') }} #}
30 |
31 |
32 |
33 | {# different formatting for en/fr dates #}
34 | {% macro biDate(date) %}
35 | {% if currentSite.language =="en" %}
36 | {{ date|date("F d, Y") }}
37 | {% endif %}
38 |
39 | {% if currentSite.language =="fr" %}
40 | {{ date|date("d F Y") }}
41 | {% endif %}
42 | {% endmacro %}
43 |
--------------------------------------------------------------------------------
/config/project/fields/contentBuilder--77af5a62-d057-494a-91ac-9edf65b6b266.yaml:
--------------------------------------------------------------------------------
1 | columnSuffix: null
2 | handle: contentBuilder
3 | instructions: null
4 | name: 'Content Builder'
5 | searchable: true
6 | settings:
7 | createButtonLabel: null
8 | defaultIndexViewMode: cards
9 | entryTypes:
10 | -
11 | __assoc__:
12 | -
13 | - uid
14 | - 48d0d0b8-2e48-4232-8b09-a401c6493902 # Fragment Block
15 | -
16 | __assoc__:
17 | -
18 | - uid
19 | - 57a74cde-de83-4b69-88ff-a4472daac7f7 # Call To Action
20 | -
21 | __assoc__:
22 | -
23 | - uid
24 | - 2456a57a-605c-4af0-9611-f48ca631ff0a
25 | -
26 | __assoc__:
27 | -
28 | - uid
29 | - 70339fac-606b-4827-9a19-c97a3f0bd59c # Copy
30 | -
31 | __assoc__:
32 | -
33 | - uid
34 | - a983660a-2b2e-413f-a79c-498b502b4f85 # Code Embed
35 | -
36 | __assoc__:
37 | -
38 | - uid
39 | - c951c9a0-1cca-4210-bef8-2d3d0446e841 # Related Entries
40 | includeTableView: false
41 | maxEntries: null
42 | minEntries: null
43 | pageSize: null
44 | propagationKeyFormat: null
45 | propagationMethod: none
46 | showCardsInGrid: false
47 | viewMode: blocks
48 | translationKeyFormat: null
49 | translationMethod: site
50 | type: craft\fields\Matrix
51 |
--------------------------------------------------------------------------------
/config/project/volumes/userGuide--d19b4314-0267-4e95-9e63-2462a334eea1.yaml:
--------------------------------------------------------------------------------
1 | fieldLayouts:
2 | eb53ac7e-fc3b-4522-a428-91addf2ec44f:
3 | tabs:
4 | -
5 | elementCondition: null
6 | elements:
7 | -
8 | autocapitalize: true
9 | autocomplete: false
10 | autocorrect: true
11 | class: null
12 | disabled: false
13 | elementCondition: null
14 | id: null
15 | inputType: null
16 | instructions: null
17 | label: null
18 | max: null
19 | min: null
20 | name: null
21 | orientation: null
22 | placeholder: null
23 | readonly: false
24 | requirable: false
25 | size: null
26 | step: null
27 | tip: null
28 | title: null
29 | type: craft\fieldlayoutelements\assets\AssetTitleField
30 | uid: 541ec78b-792f-4edb-a994-06a8971aa7b5
31 | userCondition: null
32 | warning: null
33 | width: 100
34 | name: Content
35 | uid: b560c7ff-4231-406d-975b-a98c765ba8df
36 | userCondition: null
37 | fs: userGuide
38 | handle: userGuide
39 | name: 'User Guide'
40 | sortOrder: 2
41 | titleTranslationKeyFormat: null
42 | titleTranslationMethod: site
43 | transformFs: null
44 | transformSubpath: ''
45 |
--------------------------------------------------------------------------------
/src/js/generate-manifest.js:
--------------------------------------------------------------------------------
1 | // src/js/generate-manifest.js
2 | const fs = require('fs');
3 | const path = require('path');
4 | const crypto = require('crypto');
5 |
6 | function generateHash(filePath) {
7 | const fileBuffer = fs.readFileSync(filePath);
8 | const hashSum = crypto.createHash('md5');
9 | hashSum.update(fileBuffer);
10 | return hashSum.digest('hex').slice(0, 8);
11 | }
12 |
13 | function generateManifest() {
14 | const publicDir = path.join(__dirname, '../../public/assets');
15 | const manifest = {};
16 |
17 | // Process JS files
18 | const jsFiles = fs.readdirSync(path.join(publicDir, 'js'))
19 | .filter(file => file.endsWith('.js'));
20 |
21 | jsFiles.forEach(file => {
22 | const filePath = path.join(publicDir, 'js', file);
23 | const hash = generateHash(filePath);
24 | manifest[`js/${file}`] = `js/${file}?v=${hash}`;
25 | });
26 |
27 | // Process CSS files
28 | const cssFiles = fs.readdirSync(path.join(publicDir, 'css'))
29 | .filter(file => file.endsWith('.css'));
30 |
31 | cssFiles.forEach(file => {
32 | const filePath = path.join(publicDir, 'css', file);
33 | const hash = generateHash(filePath);
34 | manifest[`css/${file}`] = `css/${file}?v=${hash}`;
35 | });
36 |
37 | // Write manifest file
38 | fs.writeFileSync(
39 | path.join(publicDir, 'manifest.json'),
40 | JSON.stringify(manifest, null, 2)
41 | );
42 | }
43 |
44 | generateManifest();
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | # The environment Craft is currently running in (dev, staging, production, etc.)
2 | ENVIRONMENT=dev
3 |
4 | # The application ID used to to uniquely store session and cache data, mutex locks, and more
5 | APP_ID=
6 |
7 | # The secure key Craft will use for hashing and encrypting data
8 | SECURITY_KEY=
9 |
10 | # Database Configuration
11 | DB_DRIVER=mysql
12 | DB_SERVER=db
13 | DB_PORT=3306
14 | DB_DATABASE=db
15 | DB_USER=db
16 | DB_PASSWORD=db
17 | DB_SCHEMA=
18 | DB_TABLE_PREFIX=
19 |
20 | CRAFT_CP_TRIGGER=access
21 |
22 | SITE_NAME="Starter Site Name"
23 | SITE_NAME_EN="Starter Site Name (en)"
24 | SITE_NAME_FR="Starter Site Name (fr)"
25 |
26 | PRIMARY_SITE_URL=
27 | # SITE_URL_EN=https://craft-starter.ddev.site/en
28 | # SITE_URL_FR=https://craft-starter.ddev.site/fr
29 |
30 | # site path
31 | SITE_PATH=/var/www/html/public
32 |
33 | # uploads path
34 | ASSET_BASE_PATH=/var/www/html/public/uploads
35 | ASSET_BASE_URL=https://craft-starter.ddev.site/uploads
36 |
37 | # Email Settings
38 | TO_EMAIL=none@domain.com
39 | FROM_EMAIL=none@domain.com
40 | SYSTEM_EMAIL=none@domain.com
41 | SENDER_NAME=test
42 | # email hostname
43 | EMAIL_HOSTNAME=localhost
44 | # email port
45 | EMAIL_PORT=1025
46 | # email username
47 | EMAIL_USERNAME=null
48 | # email password
49 | EMAIL_PASSWORD=null
50 |
51 | #Environment Label
52 | CRAFT_ENV_LABEL_PREFIX=" Local Site"
53 | CRAFT_ENV_LABEL_COLOR="#FFFF00"
54 | CRAFT_ENV_LABEL_TEXT_COLOR="#FF0000"
--------------------------------------------------------------------------------
/templates/_includes/notice-bar.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 | {% set notice = craft.entries.section('noticeBar').one() %}
4 |
5 | {% if notice.enableNoticeBar == '1'
6 | and ( notice.noticeBarLocation !="homePageOnly" or ( entry.slug == '__home__' ) )
7 | %}
8 |
9 |
10 |
14 |
15 |
16 |
17 | {{ notice.text|retcon([
18 | ['attr', 'p', { class: 'm-0 text-sm' }]
19 | ]) }}
20 |
21 | {% if notice.button|length %}
22 | {{ notice.button.getLink({
23 | class: 'btn mx-8',
24 | }) }}
25 | {% endif %}
26 |
30 | X
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {% endif %}
39 |
--------------------------------------------------------------------------------
/templates/_user-guide/blocks/video.twig:
--------------------------------------------------------------------------------
1 | {% if block.sectionTitle|length %}
2 | {{ block.sectionTitle }}
3 | {% endif %}
4 |
5 | {% if block.sectionSubtitle|length %}
6 | {{ block.sectionSubtitle }}
7 | {% endif %}
8 |
9 | {% set video = block.videoUpload.one() %}
10 |
11 |
12 | Your browser does not support the video tag.
13 |
14 |
15 | Download Video
--------------------------------------------------------------------------------
/config/project/entryTypes/newsCategories--ef488e30-b35e-4bf8-87a3-34f0f76b622f.yaml:
--------------------------------------------------------------------------------
1 | color: yellow
2 | fieldLayouts:
3 | b3390d68-f84f-46fa-9b06-88b3dc039727:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | requirable: false
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\TitleField
33 | uid: a9b04cad-9f4c-4de5-b25a-39852ba6691e
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | name: Content
38 | uid: 14887279-63d4-41f5-880f-5923f8d02a1d
39 | userCondition: null
40 | handle: newsCategories
41 | hasTitleField: true
42 | icon: icons
43 | name: 'News Categories'
44 | showSlugField: true
45 | showStatusField: true
46 | slugTranslationKeyFormat: ''
47 | slugTranslationMethod: site
48 | titleFormat: ''
49 | titleTranslationKeyFormat: ''
50 | titleTranslationMethod: site
51 |
--------------------------------------------------------------------------------
/templates/_blocks/video.twig:
--------------------------------------------------------------------------------
1 | {# use block layout #}
2 | {% extends '_blocks/_layout' %}
3 |
4 | {% block templateComment %}
5 | {{ craft.app.config.general.devMode ? ('') | raw }}
6 | {% endblock %}
7 |
8 | {# section background #}
9 | {% set background = 'bg-gray-200' %}
10 |
11 | {% block body %}
12 | {% if block.sectionTitle|length %}
13 | {{ block.sectionTitle ?? "Video Block" }}
14 | {% endif %}
15 |
16 | {#
17 | Override the default colour theme in Plyr:
18 | https://github.com/sampotts/plyr#customizing-the-css
19 |
20 | // this can be done in the @layer base of src/css/app.css
21 | #}
22 |
23 | {#
24 | // javascript in src/js/app.js
25 | #}
26 |
27 |
28 |
29 |
30 |
31 | {# Assume Vimeo: #}
32 | {% if 'vimeo' in block.videoLink %}
33 |
37 |
38 | {% else %}
39 |
40 | {# Assume YouTube: #}
41 |
45 |
46 | {% endif %}
47 |
48 | {% endblock %}
--------------------------------------------------------------------------------
/config/assetrev.php:
--------------------------------------------------------------------------------
1 | 'manifest|querystring|passthrough',
10 |
11 | // The strategies you'd like to try to rev your asset filename. You can
12 | // provide the name of a class that implements `StrategyContact` or a
13 | // custom closure. The defaults should cater to most requirements.
14 |
15 | 'strategies' => [
16 | 'manifest' => \club\assetrev\utilities\strategies\ManifestFileStrategy::class,
17 | 'querystring' => \club\assetrev\utilities\strategies\QueryStringStrategy::class,
18 | 'passthrough' => function ($filename, $config) {
19 | return $filename;
20 | },
21 | ],
22 |
23 | // The path to your asset manifest; most likely generated by a task runner
24 | // such as Gulp or Grunt. The path will be relative to your Craft base
25 | // directory, unless you supply an absolute path.
26 |
27 | 'manifestPath' => 'public/assets/mix-manifest.json',
28 |
29 | // The path where your built asset files can be found. Required for query
30 | // string creation. Again, this is relative to your Craft base directory,
31 | // unless you supply an absolute path.
32 |
33 | 'assetsBasePath' => '@webroot/assets',
34 |
35 | // A prefix to apply to your asset filenames when they are output. You would
36 | // likely want to set this if the paths in your manifest file are going to
37 | // be different to the final intended asset URL.
38 |
39 | 'assetUrlPrefix' => '/assets',
40 |
41 | ];
42 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const colors = require('tailwindcss/colors')
2 |
3 | module.exports = {
4 | content: [
5 | './templates/**/*.{html,twig,js}',
6 | './src/**/*.{vue,js,jsx}',
7 | ],
8 | darkMode:'class',
9 | theme: {
10 | container: {
11 | center: true,
12 | padding:'1rem',
13 | },
14 | colors: {
15 | grayBrand: {
16 | light: '#DADADA',
17 | DEFAULT: '#373F41',
18 | },
19 | 'white': {
20 | DEFAULT: '#FFFFFF',
21 | },
22 | 'black': {
23 | DEFAULT: '#000000',
24 | },
25 | transparent: 'transparent',
26 | current: 'currentColor',
27 | green: colors.green,
28 | pink: colors.pink,
29 | red: colors.red,
30 | gray: colors.gray,
31 | },
32 | extend: {
33 | fontFamily: {
34 | 'default':['HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', 'Helvetica', 'Arial', 'Lucida Grande', 'sans-serif'],
35 | },
36 | fontSize: {
37 | },
38 | typography: (theme) => ({
39 | DEFAULT: {
40 | css: {
41 | maxWidth: '100%',
42 | color: theme('colors.gray.900'),
43 | a: {
44 | color: theme('colors.red.500'),
45 | '&:hover': {
46 | color: theme('colors.red.700'),
47 | textDecoration: 'none',
48 | },
49 | },
50 | },
51 | },
52 | }),
53 | //https://github.com/tailwindlabs/tailwindcss-container-queries
54 | // containers: {
55 | // '2xs': '16rem',
56 | // },
57 | },
58 | },
59 | plugins: [
60 | // require('@tailwindcss/container-queries'),
61 | require('@tailwindcss/typography'),
62 | ],
63 | }
64 |
--------------------------------------------------------------------------------
/templates/_includes/footer.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | ©{{ now|date('Y') }} {{ siteName }}
10 |
11 |
12 |
13 |
14 |
15 | half width footer content here Lorem ipsum, dolor sit amet consectetur adipisicing elit. Commodi fugit maxime cumque voluptates ut soluta blanditiis cupiditate dolore necessitatibus magni.
16 |
17 | {# sitemap #}
18 |
19 | Sitemap
20 |
21 |
22 |
23 |
24 | {# social links here #}
25 | {% set socialLut = {
26 | facebook: { link:'#', icon:'FB', label:'Facebook' },
27 | twitter: { link:'#', icon:'TW', label:'Twitter' },
28 | linkedin: { link:'#', icon:'LI', label:'LinkedIn' },
29 | instagram: { link:'#', icon:'IN', label:'Instagram' }
30 | } %}
31 |
32 | {% for item in socialLut %}
33 | {{ item.icon }}
34 | {% endfor %}
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/templates/_components/news-listing.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 | {% set seg2 = craft.app.request.getSegment('2') %}
4 | {% set seg3 = craft.app.request.getSegment('3') %}
5 |
6 |
7 | {# set variable for sprig to hook into with default for first page load #}
8 | {% set page = page ?? 1 %}
9 | {% set category = category ?? '' %}
10 | {#
11 | // need above values in hidden inputs for persistent state
12 | // https://github.com/putyourlightson/craft-sprig/issues/71#issuecomment-745388432
13 | #}
14 | {{ hiddenInput('page', page) }}
15 | {{ hiddenInput('category', category) }}
16 |
17 | {% set params = { section: 'news', limit: limit } %}
18 |
19 | {# filter by category if on category page #}
20 | {% set blogCategory = craft.entries.slug(category).one() %}
21 | {% if category != '' %}
22 | {% set params = params | merge({ relatedTo: blogCategory }) %}
23 | {% endif %}
24 |
25 | {% set entryQuery = craft.entries(params) %}
26 |
27 | {# Paginates the entry query given the current page #}
28 | {% set pageInfo = sprig.paginate(entryQuery, page) %}
29 | {% set entries = pageInfo.pageResults %}
30 |
31 |
32 |
33 |
34 |
35 | {% for entry in entries %}
36 |
37 | {% include "_includes/news-listing-article" %}
38 | {% endfor %}
39 |
40 |
41 |
42 |
43 | {# pagination #}
44 |
45 | {% include "_components/pagination" %}
46 |
47 |
48 |
49 | {% do sprig.pushUrl('?' ~ {category: category, page: page,}|url_encode) %}
--------------------------------------------------------------------------------
/config/project/entryTypes/image--4427e835-20ed-496b-9469-831bb0882185.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 63e4bf4a-e003-4c1d-9c48-c8e7d9b987d0:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | dateAdded: '2025-01-27T11:45:28-05:00'
10 | elementCondition: null
11 | fieldUid: 25e2157e-9a82-41cd-970f-4fc58cb3a835 # Screenshots
12 | handle: null
13 | includeInCards: false
14 | instructions: null
15 | label: Screenshots
16 | providesThumbs: true
17 | required: false
18 | tip: null
19 | type: craft\fieldlayoutelements\CustomField
20 | uid: 14f81187-aacb-4e3e-87fe-af1a34be64a3
21 | userCondition: null
22 | warning: null
23 | width: 100
24 | -
25 | dateAdded: '2025-01-27T11:45:28-05:00'
26 | elementCondition: null
27 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
28 | handle: caption
29 | includeInCards: true
30 | instructions: null
31 | label: Caption
32 | providesThumbs: false
33 | required: false
34 | tip: null
35 | type: craft\fieldlayoutelements\CustomField
36 | uid: 1eba92eb-e0ad-42f2-a284-4a25b7f69aae
37 | userCondition: null
38 | warning: null
39 | width: 100
40 | name: Content
41 | uid: 1f728f66-64a4-4bcc-9e70-0e2bebe42c17
42 | userCondition: null
43 | handle: image
44 | hasTitleField: false
45 | icon: null
46 | name: Image
47 | showSlugField: true
48 | showStatusField: true
49 | slugTranslationKeyFormat: null
50 | slugTranslationMethod: site
51 | titleFormat: null
52 | titleTranslationKeyFormat: null
53 | titleTranslationMethod: site
54 |
--------------------------------------------------------------------------------
/config/project/entryTypes/video--2456a57a-605c-4af0-9611-f48ca631ff0a.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | e426ad6b-03b0-4220-8668-3337284b7c5d:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | dateAdded: '2025-01-27T16:45:28+00:00'
10 | elementCondition: null
11 | fieldUid: 127f0d67-cfaf-4e5d-b3f8-111b7fda6f64 # Padding
12 | handle: null
13 | includeInCards: true
14 | instructions: null
15 | label: null
16 | providesThumbs: false
17 | required: false
18 | tip: null
19 | type: craft\fieldlayoutelements\CustomField
20 | uid: ac42c12f-111d-4cbb-883c-553898e51e5a
21 | userCondition: null
22 | warning: null
23 | width: 100
24 | -
25 | dateAdded: '2025-01-27T16:45:28+00:00'
26 | elementCondition: null
27 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
28 | handle: videoLink
29 | includeInCards: false
30 | instructions: 'YouTube or Vimeo'
31 | label: 'Video Link'
32 | providesThumbs: false
33 | required: false
34 | tip: null
35 | type: craft\fieldlayoutelements\CustomField
36 | uid: ffe24cd2-8cde-4218-aa2a-15b98218f829
37 | userCondition: null
38 | warning: null
39 | width: 100
40 | name: Content
41 | uid: 78216433-19bd-4871-aee8-1687783498cd
42 | userCondition: null
43 | handle: video
44 | hasTitleField: false
45 | icon: null
46 | name: Video
47 | showSlugField: true
48 | showStatusField: true
49 | slugTranslationKeyFormat: null
50 | slugTranslationMethod: site
51 | titleFormat: null
52 | titleTranslationKeyFormat: null
53 | titleTranslationMethod: site
54 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "createsean/craft-starter",
3 | "description": "A Craft CMS starter project by Sean Smith",
4 | "keywords": [
5 | "craft",
6 | "cms",
7 | "craftcms",
8 | "project"
9 | ],
10 | "type": "project",
11 | "license": "MIT",
12 | "minimum-stability": "beta",
13 | "require": {
14 | "clubstudioltd/craft-asset-rev": "^8.0.0",
15 | "craftcms/ckeditor": "^4.0.3",
16 | "craftcms/cms": "^5.0.0",
17 | "craftcms/contact-form": "^3.1.0",
18 | "doublesecretagency/craft-cpcss": "^3.0.0",
19 | "mmikkel/retcon": "^3.0.0",
20 | "nystudio107/craft-minify": "^5.0.0-beta.2",
21 | "nystudio107/craft-seomatic": "^5.0.0-beta.8",
22 | "nystudio107/craft-typogrify": "^5.0.0-beta.2",
23 | "putyourlightson/craft-sprig": "^3.0.0-beta.2",
24 | "topshelfcraft/environment-label": "^5.0.0",
25 | "vardump/recentchanges": "^3.0.1",
26 | "verbb/hyper": "^2.0.0-beta.7",
27 | "verbb/knock-knock": "^3.0.0-beta.1",
28 | "vlucas/phpdotenv": "^5.4.0"
29 | },
30 | "require-dev": {
31 | "yiisoft/yii2-shell": "^2.0.3"
32 | },
33 | "autoload": {
34 | "psr-4": {
35 | "modules\\": "modules/",
36 | "modules\\sitemodule\\": "modules/sitemodule/src/"
37 | }
38 | },
39 | "config": {
40 | "sort-packages": true,
41 | "optimize-autoloader": true,
42 | "platform": {
43 | "php": "8.2"
44 | },
45 | "allow-plugins": {
46 | "craftcms/plugin-installer": true,
47 | "yiisoft/yii2-composer": true
48 | }
49 | },
50 | "scripts": {
51 | "post-root-package-install": [
52 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
53 | ],
54 | "post-create-project-cmd": [
55 | "@php craft setup/security-key",
56 | "@php craft setup/app-id"
57 | ],
58 | "nuke": [
59 | "rm -rf vendor/ && composer clear-cache && composer install"
60 | ]
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/config/project/entryTypes/codeEmbed--a983660a-2b2e-413f-a79c-498b502b4f85.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 5cffcd34-b35a-46b9-afa9-c3f3b295e13d:
4 | cardView:
5 | - 'layoutElement:0c4076ea-60fd-47cd-8995-455d0b2dbcd1'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:50:55+00:00'
12 | elementCondition: null
13 | fieldUid: 127f0d67-cfaf-4e5d-b3f8-111b7fda6f64 # Padding
14 | handle: null
15 | includeInCards: true
16 | instructions: null
17 | label: null
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: 0c4076ea-60fd-47cd-8995-455d0b2dbcd1
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:50:55+00:00'
28 | elementCondition: null
29 | fieldUid: 3b9496a7-4539-4c28-91bc-3e51c68f4187 # Embed
30 | handle: null
31 | includeInCards: false
32 | instructions: null
33 | label: Embed
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: e31f9ac5-7f1f-4429-9446-027fbdf0e6f3
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | name: Content
43 | uid: 1107425a-00a9-49dc-81b2-989e058e0fee
44 | userCondition: null
45 | handle: codeEmbed
46 | hasTitleField: false
47 | icon: terminal
48 | name: 'Code Embed'
49 | showSlugField: true
50 | showStatusField: true
51 | slugTranslationKeyFormat: null
52 | slugTranslationMethod: site
53 | titleFormat: null
54 | titleTranslationKeyFormat: null
55 | titleTranslationMethod: site
56 |
--------------------------------------------------------------------------------
/config/project/entryTypes/youtubeVideo--c4527788-b877-44f3-9a2d-071f696877fa.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 2be8891e-b97f-4d20-8c96-63ee3acef638:
4 | cardView:
5 | - 'layoutElement:344c64f5-781b-4fb5-a46b-4429b9f2f253'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:45:28+00:00'
12 | elementCondition: null
13 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
14 | handle: videoTitle
15 | includeInCards: true
16 | instructions: null
17 | label: 'Video Title'
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: 344c64f5-781b-4fb5-a46b-4429b9f2f253
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:45:28+00:00'
28 | elementCondition: null
29 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
30 | handle: videoId
31 | includeInCards: false
32 | instructions: 'i.e. LTRD2wUQ4KY'
33 | label: 'Video ID'
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: 0d461c76-9beb-40da-ae5e-a9d0fe2ded2d
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | name: Content
43 | uid: 22553107-05a0-4b71-be18-0d3a3d8035b8
44 | userCondition: null
45 | handle: youtubeVideo
46 | hasTitleField: false
47 | icon: null
48 | name: 'YouTube Video (user guide)'
49 | showSlugField: true
50 | showStatusField: true
51 | slugTranslationKeyFormat: null
52 | slugTranslationMethod: site
53 | titleFormat: null
54 | titleTranslationKeyFormat: null
55 | titleTranslationMethod: site
56 |
--------------------------------------------------------------------------------
/templates/_blocks/hero/standardHero.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 | {% set heroImage = block.image.one() %}
6 |
7 |
8 | {{ include('_includes/responsiveImage', {
9 | image: heroImage,
10 | transforms: [
11 | {
12 | mq:'(max-width: 767.9px)',
13 | crop: {
14 | width: 767,
15 | height:300,
16 | mode: 'crop',
17 | quality: 80,
18 | }
19 | },
20 | {
21 | mq:'(max-width: 1199px)',
22 | crop: {
23 | width: 1200,
24 | height:375,
25 | mode: 'crop',
26 | quality: 80,
27 | }
28 | },
29 | {
30 | mq:'(min-width: 1200px)',
31 | crop: {
32 | width: 1920,
33 | height:450,
34 | mode: 'crop',
35 | quality: 80,
36 | }
37 | },
38 | ],
39 | figureClass: null,
40 | figureStyle: null,
41 | pictureClass: null,
42 | caption: null,
43 | attributes: {
44 | alt: image.altText ?? image.title ?? null,
45 | class: 'object-cover z-0 w-full h-full lg:min-h-[450px] md:min-h-[375px] min-h-[300px]',
46 | loading: 'lazy',
47 | dataAttributes: ''
48 | },
49 | }, with_context = false) }}
50 |
51 |
52 | {# hero content #}
53 |
54 |
55 |
56 |
{{ block.heroTitle ?? entry.title }}
57 | {% if block.copy|length %}
58 |
59 | {{ block.copy }}
60 |
61 | {% endif %}
62 |
63 | {{ block.button.getLink({
64 | class: 'btn self-start',
65 | }) }}
66 |
67 |
68 |
69 |
70 | {# end hero content #}
71 |
--------------------------------------------------------------------------------
/templates/_includes/responsiveImage.twig:
--------------------------------------------------------------------------------
1 | {% set defaultCrop = transforms|last %}
2 | {% set defaultCrop = defaultCrop.crop %}
3 |
4 | {# set fallBack image for when the field is empty #}
5 | {% set fallbackImage = 'https://placehold.co/' ~ defaultCrop.width ~ 'x' ~ defaultCrop.height ~ '/dfe4f7/bababa' %}
6 |
7 |
8 |
9 |
10 | {% for transform in transforms %}
11 | {# jpeg source #}
12 | {% set crop = transform.crop %}
13 |
20 | {# webp source #}
21 | {% set cropWebp = transform.crop|merge({
22 | 'format': 'webp' }) %}
23 |
30 | {% endfor %}
31 |
32 | {#
33 | use the final crop in the transforms array
34 | as the default
35 | #}
36 | {% set defaultCrop = transforms|last %}
37 | {% set defaultCrop = defaultCrop.crop %}
38 |
47 |
48 |
49 | {# image caption #}
50 | {% if caption is defined and caption != null%}
51 |
52 | {{ caption }}
53 |
54 | {% endif %}
55 |
--------------------------------------------------------------------------------
/config/project/entryTypes/fragments--c166cd47-6f64-49e0-b33d-6aceadb3fcc3.yaml:
--------------------------------------------------------------------------------
1 | color: pink
2 | fieldLayouts:
3 | 27773fbe-4706-4cf6-aff2-7c6d13d64fe2:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | requirable: false
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\entries\EntryTitleField
33 | uid: 15c4e0af-8e95-42fa-8015-e4b4a34c0c9e
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | -
38 | elementCondition: null
39 | fieldUid: 77af5a62-d057-494a-91ac-9edf65b6b266 # Content Builder
40 | handle: null
41 | includeInCards: false
42 | instructions: null
43 | label: null
44 | providesThumbs: false
45 | required: false
46 | tip: null
47 | type: craft\fieldlayoutelements\CustomField
48 | uid: 4a5d1b5b-fdc1-4395-b5ec-88613d00ba33
49 | userCondition: null
50 | warning: null
51 | width: 100
52 | name: Content
53 | uid: 683d16fd-4d8f-4461-a6dd-15b7ece55232
54 | userCondition: null
55 | handle: fragments
56 | hasTitleField: true
57 | icon: puzzle-piece
58 | name: Fragments
59 | showSlugField: true
60 | showStatusField: true
61 | slugTranslationKeyFormat: ''
62 | slugTranslationMethod: site
63 | titleFormat: ''
64 | titleTranslationKeyFormat: ''
65 | titleTranslationMethod: site
66 |
--------------------------------------------------------------------------------
/config/project/entryTypes/userGuide--475a351b-2442-4767-8ab6-1b39216d0c61.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | b0e00b72-8d9b-40b3-87a4-efcc1d0bc0ad:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | requirable: false
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\entries\EntryTitleField
33 | uid: ef403fbe-a0cf-41c3-b22c-76881e7a4fac
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | -
38 | elementCondition: null
39 | fieldUid: d974bf8d-647d-45f3-98be-0733d5e3e1ba # User Guide
40 | handle: null
41 | includeInCards: false
42 | instructions: null
43 | label: null
44 | providesThumbs: false
45 | required: false
46 | tip: null
47 | type: craft\fieldlayoutelements\CustomField
48 | uid: 7ff5a06e-1c8f-4594-830d-de5bbf507453
49 | userCondition: null
50 | warning: null
51 | width: 100
52 | name: Content
53 | uid: 89637c1a-bab7-4e46-9f03-aef99019b870
54 | userCondition: null
55 | handle: userGuide
56 | hasTitleField: true
57 | icon: person-chalkboard
58 | name: 'User Guide'
59 | showSlugField: true
60 | showStatusField: true
61 | slugTranslationKeyFormat: ''
62 | slugTranslationMethod: site
63 | titleFormat: ''
64 | titleTranslationKeyFormat: ''
65 | titleTranslationMethod: site
66 |
--------------------------------------------------------------------------------
/config/project/entryTypes/error404--b312d78c-b490-46da-aeff-70a1be5a5505.yaml:
--------------------------------------------------------------------------------
1 | fieldLayouts:
2 | ff6710b6-fa56-44b7-a693-664ee41ba595:
3 | tabs:
4 | -
5 | elementCondition: null
6 | elements:
7 | -
8 | autocapitalize: true
9 | autocomplete: false
10 | autocorrect: true
11 | class: null
12 | dateAdded: '2025-01-27T12:01:38-05:00'
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | required: true
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\entries\EntryTitleField
33 | uid: d1826e4c-3c13-4edf-9d62-56e4d744a3dd
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | -
38 | dateAdded: '2025-01-27T12:01:38-05:00'
39 | elementCondition: null
40 | fieldUid: da3d7ec4-1d85-47ba-a517-6c81d94cc9d2 # Copy Basic
41 | handle: text
42 | includeInCards: false
43 | instructions: null
44 | label: Text
45 | providesThumbs: false
46 | required: false
47 | tip: null
48 | type: craft\fieldlayoutelements\CustomField
49 | uid: b5b39377-f0b4-4435-99cb-6f3e7418b632
50 | userCondition: null
51 | warning: null
52 | width: 100
53 | name: Content
54 | uid: 1bdacb6a-18e5-4d7a-ad23-7b647073d35e
55 | userCondition: null
56 | handle: error404
57 | hasTitleField: true
58 | name: 'Error 404'
59 | showStatusField: true
60 | slugTranslationKeyFormat: null
61 | slugTranslationMethod: site
62 | sortOrder: 1
63 | titleFormat: null
64 | titleTranslationKeyFormat: null
65 | titleTranslationMethod: site
66 |
--------------------------------------------------------------------------------
/config/project/entryTypes/sliderHero--323e9af3-aa75-4f1c-82eb-370e40179f41.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 532fe5e4-df32-4a3a-a746-e5f91f6e168b:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | dateAdded: '2024-10-23T17:27:03+00:00'
14 | disabled: false
15 | elementCondition: null
16 | id: null
17 | includeInCards: false
18 | inputType: null
19 | instructions: null
20 | label: null
21 | max: null
22 | min: null
23 | name: null
24 | orientation: null
25 | placeholder: null
26 | providesThumbs: false
27 | readonly: false
28 | requirable: false
29 | size: null
30 | step: null
31 | tip: null
32 | title: null
33 | type: craft\fieldlayoutelements\entries\EntryTitleField
34 | uid: 5e12737a-07df-4361-8f63-0eb9a62a8182
35 | userCondition: null
36 | warning: null
37 | width: 100
38 | -
39 | dateAdded: '2024-10-23T17:27:03+00:00'
40 | elementCondition: null
41 | fieldUid: 8c583e9a-a56d-486d-8550-e7eae61c8088 # Slides
42 | handle: null
43 | includeInCards: false
44 | instructions: null
45 | label: Slides
46 | providesThumbs: false
47 | required: false
48 | tip: null
49 | type: craft\fieldlayoutelements\CustomField
50 | uid: 61e062bf-9716-4fe4-892c-bc2dadb71721
51 | userCondition: null
52 | warning: null
53 | width: 100
54 | name: Content
55 | uid: e0366ccf-37de-4a01-9c00-95a40acd04f2
56 | userCondition: null
57 | handle: sliderHero
58 | hasTitleField: false
59 | icon: ''
60 | name: 'Slider Hero'
61 | showSlugField: true
62 | showStatusField: true
63 | slugTranslationKeyFormat: ''
64 | slugTranslationMethod: site
65 | titleFormat: ''
66 | titleTranslationKeyFormat: ''
67 | titleTranslationMethod: site
68 |
--------------------------------------------------------------------------------
/templates/_user-guide/styles.twig:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.ddev/commands/host/launch-site:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash # Portable shebang - finds bash anywhere
2 | ## Description: Launch Craft CMS Control Panel and site homepage (reads CRAFT_CP_TRIGGER from .env)
3 | ## Usage: launch-site [path]
4 | ## Example: "ddev launch-site" or "ddev launch-site about" or "ddev launch-site styleguide"
5 |
6 | # Handle help flag
7 | if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
8 | echo "Launch a browser with the Craft CMS Control Panel and site homepage"
9 | echo ""
10 | echo "Usage:"
11 | echo " ddev launch-site [path]"
12 | echo ""
13 | echo "Examples:"
14 | echo " \"ddev launch-site\" - Opens Control Panel and homepage"
15 | echo " \"ddev launch-site about\" - Opens Control Panel and /about"
16 | echo ""
17 | echo "The Control Panel URL is determined by the CRAFT_CP_TRIGGER value in your .env file"
18 | exit 0
19 | fi
20 |
21 | CP_TRIGGER="admin"
22 |
23 | if [ -f ".env" ]; then
24 | ENV_CP_TRIGGER=$(grep '^CRAFT_CP_TRIGGER=' .env | cut -d '=' -f2 | tr -d '"' | tr -d '"')
25 | if [ -n "$ENV_CP_TRIGGER" ]; then
26 | CP_TRIGGER="$ENV_CP_TRIGGER"
27 | fi
28 | fi
29 |
30 | # Get optional path argument
31 | CUSTOM_PATH="${1}"
32 |
33 | # Build URLs
34 | URL="https://${DDEV_HOSTNAME}/${CP_TRIGGER}"
35 |
36 | # Handle custom path if provided
37 | if [ -n "$CUSTOM_PATH" ]; then
38 | # Remove leading slash if present (we'll add it)
39 | CUSTOM_PATH="${CUSTOM_PATH#/}"
40 | HOME_URL="https://${DDEV_HOSTNAME}/${CUSTOM_PATH}"
41 | else
42 | HOME_URL="https://${DDEV_HOSTNAME}/"
43 | fi
44 |
45 | # Function to open URL in browser (cross-platform)
46 | open_browser() {
47 | local url="$1"
48 | if command -v start > /dev/null 2>&1; then
49 | # Windows (Git Bash, MSYS2, Cygwin)
50 | start "$url" 2>/dev/null || cmd.exe /c start "$url"
51 | elif command -v open > /dev/null 2>&1; then
52 | # macOS
53 | open "$url"
54 | elif command -v xdg-open > /dev/null 2>&1; then
55 | # Linux
56 | xdg-open "$url"
57 | else
58 | echo "Could not find browser launch command."
59 | echo "Please open your browser and navigate to: $url"
60 | return 1
61 | fi
62 | }
63 |
64 | echo "Launching Control Panel: $URL"
65 | open_browser "$URL"
66 |
67 | echo "Launching Homepage: $HOME_URL"
68 | open_browser "$HOME_URL"
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Craft-Starter",
3 | "version": "2.0.0",
4 | "description": "Craft Starter Website",
5 | "author": "Sean Smith, Caffeine Creations ",
6 | "copyright": "",
7 | "license": "UNLICENSED",
8 | "private": true,
9 | "devDependencies": {
10 | "@babel/preset-env": "^7.15.6",
11 | "@tailwindcss/aspect-ratio": "^0.4.2",
12 | "@tailwindcss/forms": "^0.5.3",
13 | "@tailwindcss/line-clamp": "^0.4.4",
14 | "@tailwindcss/typography": "^0.5.16",
15 | "cpy": "^11.1.0",
16 | "cpy-cli": "^5.0.0",
17 | "nodemon": "^3.0.2",
18 | "tailwindcss": "^4.0.7",
19 | "terser": "^5.39.0"
20 | },
21 | "dependencies": {
22 | "@alpinejs/collapse": "^3.14.9",
23 | "@alpinejs/focus": "^3.14.9",
24 | "@alpinejs/intersect": "^3.14.9",
25 | "@alpinejs/persist": "^3.14.9",
26 | "@alpinejs/sort": "^3.14.9",
27 | "alpinejs": "^3.14.9",
28 | "browser-sync": "^3.0.3",
29 | "concat": "^1.0.3",
30 | "npm-run-all": "^4.1.5",
31 | "plyr": "^3.7.8",
32 | "swiper": "^11.2.4"
33 | },
34 | "browserslist": [
35 | "> .5% or last 2 versions"
36 | ],
37 | "scripts": {
38 | "copy": "npx cpy-cli ./node_modules/plyr/dist/plyr.min.js ./public/assets/js/ --flat",
39 | "concat:js": "concat ./node_modules/swiper/swiper-bundle.min.js ./node_modules/@alpinejs/persist/dist/cdn.min.js ./node_modules/@alpinejs/collapse/dist/cdn.min.js ./node_modules/@alpinejs/focus/dist/cdn.min.js ./node_modules/@alpinejs/intersect/dist/cdn.min.js ./node_modules/alpinejs/dist/cdn.min.js src/js/app.js > ./public/assets/js/app.js && npx terser ./public/assets/js/app.js -o ./public/assets/js/app.min.js",
40 | "concat:css": "concat ./node_modules/plyr/dist/plyr.css ./node_modules/swiper/swiper-bundle.min.css > ./public/assets/css/vendor.combined.css",
41 | "compile:css": "npx @tailwindcss/cli -i ./src/css/app.css -o ./public/assets/css/app.css --watch --minify",
42 | "watch:manifest": "nodemon --watch public/assets/js --watch public/assets/css -e js,css src/js/generate-manifest.js",
43 | "serve": "browser-sync start --config browsersync.config.js",
44 | "build": "npm-run-all copy concat:js concat:css \"watch:css -- --no-watch --minify\" && node src/js/generate-manifest.js",
45 | "start": "npm-run-all --parallel compile:css watch:manifest copy concat:js concat:css serve"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/config/general.php:
--------------------------------------------------------------------------------
1 | [
19 | // Default Week Start Day (0 = Sunday, 1 = Monday...)
20 | 'defaultWeekStartDay' => 1,
21 |
22 | // Whether generated URLs should omit "index.php"
23 | 'omitScriptNameInUrls' => true,
24 |
25 | // Control Panel trigger word
26 | //'cpTrigger' => 'access',
27 |
28 | // The secure key Craft will use for hashing and encrypting data
29 | 'securityKey' => App::env('SECURITY_KEY'),
30 |
31 | 'disallowRobots' => true,
32 | // prevent /cpresources/ path showing up on the front end
33 | 'generateTransformsBeforePageLoad' => true,
34 |
35 | // Base site URL
36 | 'devMode' => false,
37 | 'allowAdminChanges' => true,
38 | 'addTrailingSlashesToUrls' => true,
39 | 'slugWordSeparator' => '-',
40 | 'privateTemplateTrigger' => "_",
41 | 'allowSimilarTags' => false,
42 | // 'disableDevmodeMinifying' => true,
43 | 'cacheDuration' => false,
44 | 'setPasswordPath' => 'setpassword',
45 | 'setPasswordSuccessPath' => 'login',
46 | // '@rootUrl' =>App::env('DEFAULT_SITE_URL'),
47 | // '@rootPath' =>App::env('SITE_PATH'),
48 |
49 | 'aliases' => array(
50 | 'environment' =>App::env('ENVIRONMENT'),
51 | 'basePath' =>App::env('SITE_PATH'),
52 | 'baseUrl' =>App::env('DEFAULT_SITE_URL'),
53 | ),
54 | ],
55 |
56 | // Dev environment settings
57 | 'dev' => [
58 | // Dev Mode (see https://craftcms.com/guides/what-dev-mode-does)
59 | 'devMode' => true,
60 | 'allowAdminChanges' => true,
61 | ],
62 |
63 | // Staging environment settings
64 | 'staging' => [
65 | 'devMode' => false,
66 | 'allowAdminChanges' => false,
67 |
68 | ],
69 |
70 | // Production environment settings
71 | 'production' => [
72 | 'devMode' => false,
73 | 'allowAdminChanges' => false,
74 | 'disallowRobots' => false,
75 | ],
76 | ];
77 |
--------------------------------------------------------------------------------
/config/project/entryTypes/copy2--0187ae10-82fa-43e8-ac5c-e8fa4f2e3b29.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 623094d9-a7ca-4635-b4df-fb93c89d5b74:
4 | cardView:
5 | - 'layoutElement:ba979be8-7b6e-4cd0-a807-5019461b80ee'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:41:59+00:00'
12 | elementCondition: null
13 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
14 | handle: sectionTitle
15 | includeInCards: true
16 | instructions: null
17 | label: 'Section Title'
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: ba979be8-7b6e-4cd0-a807-5019461b80ee
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:41:59+00:00'
28 | elementCondition: null
29 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
30 | handle: sectionSubtitle
31 | includeInCards: false
32 | instructions: null
33 | label: 'Section Subtitle'
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: ff756a43-1935-4002-8b9e-845dc11eb17f
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | -
43 | dateAdded: '2025-01-27T16:41:59+00:00'
44 | elementCondition: null
45 | fieldUid: f90a85bd-91b2-462b-acb4-8f265ded647e # Copy
46 | handle: null
47 | includeInCards: false
48 | instructions: null
49 | label: null
50 | providesThumbs: false
51 | required: false
52 | tip: null
53 | type: craft\fieldlayoutelements\CustomField
54 | uid: f2c4d154-8252-461f-bd0a-635b472473d1
55 | userCondition: null
56 | warning: null
57 | width: 100
58 | name: Content
59 | uid: e1a117ae-6930-4169-b0c6-525abba96b59
60 | userCondition: null
61 | handle: copy2
62 | hasTitleField: false
63 | icon: null
64 | name: 'Copy (user guide)'
65 | showSlugField: true
66 | showStatusField: true
67 | slugTranslationKeyFormat: null
68 | slugTranslationMethod: site
69 | titleFormat: null
70 | titleTranslationKeyFormat: null
71 | titleTranslationMethod: site
72 |
--------------------------------------------------------------------------------
/config/project/entryTypes/video2--a399fb79-90a6-48a0-be1f-38d2b8a81af5.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | bc2a4d96-e189-4577-9559-d25bf551d2c1:
4 | cardView:
5 | - 'layoutElement:d05631c8-4a8b-4de3-8556-fdb8dac2c21f'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:41:59+00:00'
12 | elementCondition: null
13 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
14 | handle: sectionTitle
15 | includeInCards: true
16 | instructions: null
17 | label: 'Section Title'
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: d05631c8-4a8b-4de3-8556-fdb8dac2c21f
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:41:59+00:00'
28 | elementCondition: null
29 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
30 | handle: sectionsubtitle2
31 | includeInCards: false
32 | instructions: null
33 | label: SectionSubtitle
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: 9e2a1011-236a-4ff2-9867-acac7d531f6b
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | -
43 | dateAdded: '2025-01-27T16:41:59+00:00'
44 | elementCondition: null
45 | fieldUid: 6f74be98-1b1b-470e-a96a-727b01e0b225 # Video Upload
46 | handle: null
47 | includeInCards: false
48 | instructions: null
49 | label: 'Video Upload'
50 | providesThumbs: true
51 | required: false
52 | tip: null
53 | type: craft\fieldlayoutelements\CustomField
54 | uid: 4f452736-a434-4ee7-b2d8-a1bd8f95e768
55 | userCondition: null
56 | warning: null
57 | width: 100
58 | name: Content
59 | uid: 56c54d1a-0bc9-493a-a342-789511c65600
60 | userCondition: null
61 | handle: video2
62 | hasTitleField: false
63 | icon: null
64 | name: 'Video (user guide)'
65 | showSlugField: true
66 | showStatusField: true
67 | slugTranslationKeyFormat: null
68 | slugTranslationMethod: site
69 | titleFormat: null
70 | titleTranslationKeyFormat: null
71 | titleTranslationMethod: site
72 |
--------------------------------------------------------------------------------
/templates/_blocks/relatedEntries.twig:
--------------------------------------------------------------------------------
1 | {% extends '_blocks/_layout' %}
2 |
3 | {% block templateComment %}
4 | {{ craft.app.config.general.devMode ? ('') | raw }}
5 | {% endblock %}
6 |
7 | {# section background #}
8 | {% set background = '' %}
9 |
10 | {% block body %}
11 |
12 | {% if block.sectionTitle|length %}
13 | {{ block.sectionTitle }}
14 | {% endif %}
15 |
16 |
17 | {% for entry in block.relatedEntries.collect() %}
18 |
19 |
20 | {% set image = entry.listingImage.one() %}
21 | {{ include('_includes/responsiveImage', {
22 | image: image,
23 | transforms: [
24 | {
25 | mq:'(max-width: 767.9px)',
26 | crop: {
27 | width: 576,
28 | height:432,
29 | mode: 'crop',
30 | quality: 80,
31 | }
32 | },
33 | {
34 | mq:'(min-width:768px) and (max-width: 1023.9px)',
35 | crop: {
36 | width: 232,
37 | height:174,
38 | mode: 'crop',
39 | quality: 80,
40 | }
41 | },
42 | {
43 | mq:'(min-width:1024px) and (max-width: 1279.9px)',
44 | crop: {
45 | width: 310,
46 | height:232,
47 | mode: 'crop',
48 | quality: 80,
49 | }
50 | },
51 | {
52 | mq:'(min-width: 1280px)',
53 | crop: {
54 | width: 480,
55 | height:360,
56 | mode: 'crop',
57 | quality: 80,
58 | }
59 | },
60 | ],
61 | attributes: {
62 | alt: image.altText ?? image.title ?? null,
63 | class: '',
64 | loading: 'lazy',
65 | dataAttributes: ''
66 | },
67 | }, with_context = false) }}
68 |
69 |
70 |
73 | {% if entry.summary|length %}
74 |
75 | {{ entry.summary }}
76 |
77 | {% endif %}
78 |
Learn More
79 |
80 |
81 | {% endfor %}
82 |
83 |
84 | {% endblock %}
--------------------------------------------------------------------------------
/config/project/entryTypes/copy--70339fac-606b-4827-9a19-c97a3f0bd59c.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | f3caeaf8-c441-4ad3-a2e8-5ea9abdc3340:
4 | cardView:
5 | - 'layoutElement:eab65f53-ddcc-4fe7-86a6-125f0da1b7b0'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:37:44+00:00'
12 | elementCondition: null
13 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
14 | handle: sectionTitle
15 | includeInCards: false
16 | instructions: null
17 | label: 'Section Title'
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: 1bbe1188-9327-49e7-a774-9a8025b4a074
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:37:44+00:00'
28 | elementCondition: null
29 | fieldUid: f90a85bd-91b2-462b-acb4-8f265ded647e # Copy
30 | handle: null
31 | includeInCards: false
32 | instructions: null
33 | label: null
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: 7f199898-3c5d-4edc-bc9c-8140c1e08e8d
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | name: Content
43 | uid: a7f94964-43d2-4526-914c-0aab192f6b93
44 | userCondition: null
45 | -
46 | elementCondition: null
47 | elements:
48 | -
49 | dateAdded: '2025-01-27T16:37:44+00:00'
50 | elementCondition: null
51 | fieldUid: 127f0d67-cfaf-4e5d-b3f8-111b7fda6f64 # Padding
52 | handle: null
53 | includeInCards: true
54 | instructions: null
55 | label: null
56 | providesThumbs: false
57 | required: false
58 | tip: null
59 | type: craft\fieldlayoutelements\CustomField
60 | uid: eab65f53-ddcc-4fe7-86a6-125f0da1b7b0
61 | userCondition: null
62 | warning: null
63 | width: 100
64 | name: Settings
65 | uid: a21a221d-a9f7-41b7-aa72-d995d0559cbd
66 | userCondition: null
67 | handle: copy
68 | hasTitleField: false
69 | icon: font-case
70 | name: Copy
71 | showSlugField: true
72 | showStatusField: true
73 | slugTranslationKeyFormat: null
74 | slugTranslationMethod: site
75 | titleFormat: null
76 | titleTranslationKeyFormat: null
77 | titleTranslationMethod: site
78 |
--------------------------------------------------------------------------------
/templates/_tw-config/tw.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors": {
3 | "grayBrand": {
4 | "light": "#DADADA",
5 | "DEFAULT": "#373F41"
6 | },
7 | "white": {
8 | "DEFAULT": "#FFFFFF"
9 | },
10 | "black": {
11 | "DEFAULT": "#000000"
12 | },
13 | "transparent": "transparent",
14 | "current": "currentColor",
15 | "green": {
16 | "50": "#f0fdf4",
17 | "100": "#dcfce7",
18 | "200": "#bbf7d0",
19 | "300": "#86efac",
20 | "400": "#4ade80",
21 | "500": "#22c55e",
22 | "600": "#16a34a",
23 | "700": "#15803d",
24 | "800": "#166534",
25 | "900": "#14532d"
26 | },
27 | "pink": {
28 | "50": "#fdf2f8",
29 | "100": "#fce7f3",
30 | "200": "#fbcfe8",
31 | "300": "#f9a8d4",
32 | "400": "#f472b6",
33 | "500": "#ec4899",
34 | "600": "#db2777",
35 | "700": "#be185d",
36 | "800": "#9d174d",
37 | "900": "#831843"
38 | },
39 | "red": {
40 | "50": "#fef2f2",
41 | "100": "#fee2e2",
42 | "200": "#fecaca",
43 | "300": "#fca5a5",
44 | "400": "#f87171",
45 | "500": "#ef4444",
46 | "600": "#dc2626",
47 | "700": "#b91c1c",
48 | "800": "#991b1b",
49 | "900": "#7f1d1d"
50 | },
51 | "gray": {
52 | "50": "#f9fafb",
53 | "100": "#f3f4f6",
54 | "200": "#e5e7eb",
55 | "300": "#d1d5db",
56 | "400": "#9ca3af",
57 | "500": "#6b7280",
58 | "600": "#4b5563",
59 | "700": "#374151",
60 | "800": "#1f2937",
61 | "900": "#111827"
62 | }
63 | },
64 | "fontFamily": {
65 | "sans": [
66 | "ui-sans-serif",
67 | "system-ui",
68 | "-apple-system",
69 | "BlinkMacSystemFont",
70 | "\"Segoe UI\"",
71 | "Roboto",
72 | "\"Helvetica Neue\"",
73 | "Arial",
74 | "\"Noto Sans\"",
75 | "sans-serif",
76 | "\"Apple Color Emoji\"",
77 | "\"Segoe UI Emoji\"",
78 | "\"Segoe UI Symbol\"",
79 | "\"Noto Color Emoji\""
80 | ],
81 | "serif": [
82 | "ui-serif",
83 | "Georgia",
84 | "Cambria",
85 | "\"Times New Roman\"",
86 | "Times",
87 | "serif"
88 | ],
89 | "mono": [
90 | "ui-monospace",
91 | "SFMono-Regular",
92 | "Menlo",
93 | "Monaco",
94 | "Consolas",
95 | "\"Liberation Mono\"",
96 | "\"Courier New\"",
97 | "monospace"
98 | ],
99 | "default": [
100 | "HelveticaNeue-Light",
101 | "Helvetica Neue Light",
102 | "Helvetica Neue",
103 | "Helvetica",
104 | "Arial",
105 | "Lucida Grande",
106 | "sans-serif"
107 | ]
108 | }
109 | }
--------------------------------------------------------------------------------
/templates/_components/pagination.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
--------------------------------------------------------------------------------
/config/project/volumes/uploads--70f5d47b-4830-4d51-95fe-bc0f7ccc0670.yaml:
--------------------------------------------------------------------------------
1 | fieldLayouts:
2 | b06de4af-a975-4b6c-8ef4-1c794da71432:
3 | tabs:
4 | -
5 | elementCondition: null
6 | elements:
7 | -
8 | autocapitalize: true
9 | autocomplete: false
10 | autocorrect: true
11 | class: null
12 | dateAdded: '2025-01-27T11:37:38-05:00'
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | requirable: false
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\assets\AssetTitleField
33 | uid: c2cfa525-cf76-4f98-a9aa-5c1053b45a5c
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | -
38 | dateAdded: '2025-01-27T11:37:38-05:00'
39 | elementCondition: null
40 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
41 | handle: altText
42 | includeInCards: false
43 | instructions: null
44 | label: 'Alt Text'
45 | providesThumbs: false
46 | required: false
47 | tip: null
48 | type: craft\fieldlayoutelements\CustomField
49 | uid: 294cd7dd-e705-4c7e-8730-ef3c8e6ef66f
50 | userCondition: null
51 | warning: null
52 | width: 100
53 | -
54 | dateAdded: '2025-01-27T11:37:38-05:00'
55 | elementCondition: null
56 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
57 | handle: caption
58 | includeInCards: false
59 | instructions: null
60 | label: Caption
61 | providesThumbs: false
62 | required: false
63 | tip: null
64 | type: craft\fieldlayoutelements\CustomField
65 | uid: 8f87d31c-0e72-4d32-a0ea-c95a5c987e2f
66 | userCondition: null
67 | warning: null
68 | width: 100
69 | name: Content
70 | uid: 454bf547-c45d-41e0-9375-29df94751d21
71 | userCondition: null
72 | fs: uploads
73 | handle: uploads
74 | name: Uploads
75 | sortOrder: 1
76 | titleTranslationKeyFormat: null
77 | titleTranslationMethod: site
78 | transformFs: null
79 | transformSubpath: ''
80 |
--------------------------------------------------------------------------------
/templates/_includes/news-listing-article.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
9 |
10 |
11 |
12 | {% set image = entry.image.one() ?? fallback.fallbackImage.one() %}
13 | {{ include('_includes/responsiveImage', {
14 | image: image,
15 | transforms: [
16 | {
17 | mq:'(max-width: 767.9px)',
18 | crop: {
19 | width: 734,
20 | height:367,
21 | mode: 'crop',
22 | quality: 80,
23 | }
24 | },
25 | {
26 | mq:'(min-width:768px) and (max-width: 1024px)',
27 | crop: {
28 | width:734,
29 | height:367,
30 | mode: 'crop',
31 | quality: 80,
32 | }
33 | },
34 | {
35 | mq:'(min-width:1025px) and (max-width: 1280px)',
36 | crop: {
37 | width:480,
38 | height:240,
39 | mode: 'crop',
40 | quality: 80,
41 | }
42 | },
43 | {
44 | mq:'(min-width: 1200px)',
45 | crop: {
46 | width:734,
47 | height:367,
48 | mode: 'crop',
49 | quality: 80,
50 | }
51 | },
52 | ],
53 | figureClass: null,
54 | figureStyle: null,
55 | pictureClass: null,
56 | caption:null,
57 | attributes: {
58 | alt: image.altText ?? image.title ?? null,
59 | class: '',
60 | loading: 'lazy',
61 | dataAttributes: ''
62 | },
63 | }, with_context = false) }}
64 |
65 |
66 |
67 |
68 |
69 | {{ entry.postDate|date('F jS, Y') }}
70 |
71 |
72 | {% for category in entry.newsCategories.limit('3').all() %}
73 |
{{ category.title }} {{ not loop.last ? ', ' }}
74 | {% endfor %}
75 |
76 |
77 |
82 |
83 |
84 | {{ entry.summary }}
85 |
86 |
87 |
--------------------------------------------------------------------------------
/config/project/entryTypes/standardHero--120a7750-0967-496d-9315-bba6d83eb4b1.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 73281f26-73de-4318-a067-3d6c6905b1cd:
4 | cardView:
5 | - 'layoutElement:360e355c-d9f2-417d-af9f-ce89b15c6e4a'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2025-01-27T16:37:38+00:00'
12 | elementCondition: null
13 | fieldUid: 7bf7da79-8f7d-4a1b-8129-121b24c0d99b # Hero Image
14 | handle: image
15 | includeInCards: false
16 | instructions: null
17 | label: Image
18 | providesThumbs: true
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: 98f0e07e-81da-484f-8190-987af0f739c8
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2025-01-27T16:37:38+00:00'
28 | elementCondition: null
29 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
30 | handle: heroTitle
31 | includeInCards: true
32 | instructions: 'If empty page title will be used'
33 | label: 'Hero Title'
34 | providesThumbs: false
35 | required: false
36 | tip: null
37 | type: craft\fieldlayoutelements\CustomField
38 | uid: 360e355c-d9f2-417d-af9f-ce89b15c6e4a
39 | userCondition: null
40 | warning: null
41 | width: 100
42 | -
43 | dateAdded: '2025-01-27T16:37:38+00:00'
44 | elementCondition: null
45 | fieldUid: da3d7ec4-1d85-47ba-a517-6c81d94cc9d2 # Copy Basic
46 | handle: copy
47 | includeInCards: false
48 | instructions: null
49 | label: Copy
50 | providesThumbs: false
51 | required: false
52 | tip: null
53 | type: craft\fieldlayoutelements\CustomField
54 | uid: b95dfd47-bd17-4d2d-b2f5-586a0750667f
55 | userCondition: null
56 | warning: null
57 | width: 100
58 | -
59 | dateAdded: '2025-01-27T16:37:38+00:00'
60 | elementCondition: null
61 | fieldUid: 136d3c61-5e7c-4eb4-afc0-5c78565fbe8b # Button
62 | handle: null
63 | includeInCards: false
64 | instructions: null
65 | label: null
66 | providesThumbs: false
67 | required: false
68 | tip: null
69 | type: craft\fieldlayoutelements\CustomField
70 | uid: 8f7852fc-9a4e-40a7-9816-dbb286775bf9
71 | userCondition: null
72 | warning: null
73 | width: 100
74 | name: Content
75 | uid: 4f2e4fad-7ce3-4757-abbd-6483c2dc8abe
76 | userCondition: null
77 | handle: standardHero
78 | hasTitleField: false
79 | icon: null
80 | name: 'Standard Hero'
81 | showSlugField: true
82 | showStatusField: true
83 | slugTranslationKeyFormat: null
84 | slugTranslationMethod: site
85 | titleFormat: null
86 | titleTranslationKeyFormat: null
87 | titleTranslationMethod: site
88 |
--------------------------------------------------------------------------------
/config/project/entryTypes/slide--d399ecfb-7ec8-47d8-84ed-b8447e779a67.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | description: null
3 | fieldLayouts:
4 | cd7a8b0c-f1dc-4657-98cc-8b2e9c46c04f:
5 | cardThumbAlignment: end
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2024-10-23T17:31:19+00:00'
12 | editCondition: null
13 | elementCondition: null
14 | fieldUid: b2f53aa5-81a3-466c-af2d-e30dab4ed3d8 # Image
15 | handle: image
16 | includeInCards: false
17 | instructions: '1900px * 450px'
18 | label: 'Slide Background Image'
19 | providesThumbs: true
20 | required: false
21 | tip: null
22 | type: craft\fieldlayoutelements\CustomField
23 | uid: 089152b0-0d41-4e63-92a8-d83178a4ce67
24 | userCondition: null
25 | warning: null
26 | width: 100
27 | -
28 | dateAdded: '2024-10-23T17:31:19+00:00'
29 | editCondition: null
30 | elementCondition: null
31 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
32 | handle: slideTitle
33 | includeInCards: false
34 | instructions: null
35 | label: 'Slide Title'
36 | providesThumbs: false
37 | required: true
38 | tip: null
39 | type: craft\fieldlayoutelements\CustomField
40 | uid: a4a388a4-1eb3-4e3a-8781-e0887b77d13e
41 | userCondition: null
42 | warning: null
43 | width: 100
44 | -
45 | dateAdded: '2024-10-23T17:31:19+00:00'
46 | editCondition: null
47 | elementCondition: null
48 | fieldUid: f90a85bd-91b2-462b-acb4-8f265ded647e # Copy
49 | handle: null
50 | includeInCards: false
51 | instructions: null
52 | label: null
53 | providesThumbs: false
54 | required: false
55 | tip: null
56 | type: craft\fieldlayoutelements\CustomField
57 | uid: 9dc85697-b157-4152-bec7-c66e23453a25
58 | userCondition: null
59 | warning: null
60 | width: 100
61 | -
62 | dateAdded: '2024-10-23T17:31:19+00:00'
63 | editCondition: null
64 | elementCondition: null
65 | fieldUid: 136d3c61-5e7c-4eb4-afc0-5c78565fbe8b # Button
66 | handle: null
67 | includeInCards: false
68 | instructions: null
69 | label: null
70 | providesThumbs: false
71 | required: false
72 | tip: null
73 | type: craft\fieldlayoutelements\CustomField
74 | uid: 0597412a-b607-46e5-a657-aeced9b4a521
75 | userCondition: null
76 | warning: null
77 | width: 100
78 | name: Content
79 | uid: 50edff63-4472-47a0-b1de-b7d952adb095
80 | userCondition: null
81 | handle: slide
82 | hasTitleField: false
83 | icon: gallery-thumbnails
84 | name: Slide
85 | showSlugField: false
86 | showStatusField: false
87 | slugTranslationKeyFormat: null
88 | slugTranslationMethod: site
89 | titleFormat: '{slideTitle}'
90 | titleTranslationKeyFormat: null
91 | titleTranslationMethod: site
92 |
--------------------------------------------------------------------------------
/templates/_includes/contact-form.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 |
7 | {% macro errorList(errors) %}
8 | {% if errors %}
9 | {{ ul(errors, {class: 'errors'}) }}
10 | {% endif %}
11 | {% endmacro %}
12 |
13 | {% set message = message ?? null %}
14 |
15 | {# The `success` variable is defined by the contact form controller on success #}
16 | {% if success is defined and success %}
17 |
18 |
{{ fromName }}, Your message was successfully sent!
19 |
20 | {% else %}
21 |
22 | no success
23 |
24 | {% endif %}
25 |
26 |
27 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/config/project/entryTypes/relatedEntries--c951c9a0-1cca-4210-bef8-2d3d0446e841.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 5dd65675-497a-4ca9-b807-7e443b915ef5:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | dateAdded: '2025-01-27T16:37:49+00:00'
14 | disabled: false
15 | elementCondition: null
16 | id: null
17 | includeInCards: false
18 | inputType: null
19 | instructions: null
20 | label: null
21 | max: null
22 | min: null
23 | name: null
24 | orientation: null
25 | placeholder: null
26 | providesThumbs: false
27 | readonly: false
28 | required: true
29 | size: null
30 | step: null
31 | tip: null
32 | title: null
33 | type: craft\fieldlayoutelements\entries\EntryTitleField
34 | uid: 13a4007c-1fdb-4747-bb47-e83ca4ca29a7
35 | userCondition: null
36 | warning: null
37 | width: 100
38 | -
39 | dateAdded: '2025-01-27T16:37:49+00:00'
40 | elementCondition: null
41 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
42 | handle: sectionTitle
43 | includeInCards: false
44 | instructions: null
45 | label: 'Section Title'
46 | providesThumbs: false
47 | required: false
48 | tip: null
49 | type: craft\fieldlayoutelements\CustomField
50 | uid: 52b9bea1-445b-41fa-ac5f-b334fc72f044
51 | userCondition: null
52 | warning: null
53 | width: 100
54 | -
55 | dateAdded: '2025-01-27T16:37:49+00:00'
56 | elementCondition: null
57 | fieldUid: 5026b221-a48f-4868-9f48-07428068e77e # Related Entries
58 | handle: null
59 | includeInCards: false
60 | instructions: null
61 | label: 'Related Entries'
62 | providesThumbs: false
63 | required: false
64 | tip: null
65 | type: craft\fieldlayoutelements\CustomField
66 | uid: 23c2f709-04c7-4f0f-926d-c0f2e04b3fc7
67 | userCondition: null
68 | warning: null
69 | width: 100
70 | name: Content
71 | uid: 6f27ce87-60b4-40a1-8b87-dea3e269f9a5
72 | userCondition: null
73 | -
74 | elementCondition: null
75 | elements:
76 | -
77 | dateAdded: '2025-01-27T16:37:49+00:00'
78 | elementCondition: null
79 | fieldUid: 127f0d67-cfaf-4e5d-b3f8-111b7fda6f64 # Padding
80 | handle: null
81 | includeInCards: false
82 | instructions: null
83 | label: null
84 | providesThumbs: false
85 | required: false
86 | tip: null
87 | type: craft\fieldlayoutelements\CustomField
88 | uid: a5fecab2-6bd5-43f3-9ae5-597561792f6f
89 | userCondition: null
90 | warning: null
91 | width: 100
92 | name: Settings
93 | uid: 38096454-3d05-4faf-a7c4-290e1628e1de
94 | userCondition: null
95 | handle: relatedEntries
96 | hasTitleField: false
97 | icon: ''
98 | name: 'Related Entries'
99 | showSlugField: true
100 | showStatusField: true
101 | slugTranslationKeyFormat: ''
102 | slugTranslationMethod: site
103 | titleFormat: ''
104 | titleTranslationKeyFormat: ''
105 | titleTranslationMethod: site
106 |
--------------------------------------------------------------------------------
/config/project/entryTypes/home--ea7fe716-adee-4200-a8ca-15362418cd97.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 69a2a893-3c54-4b63-80c3-7a42ccd38392:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | dateAdded: '2024-10-23T17:26:50+00:00'
14 | disabled: false
15 | elementCondition: null
16 | id: null
17 | includeInCards: false
18 | inputType: null
19 | instructions: null
20 | label: null
21 | max: null
22 | min: null
23 | name: null
24 | orientation: null
25 | placeholder: null
26 | providesThumbs: false
27 | readonly: false
28 | requirable: false
29 | size: null
30 | step: null
31 | tip: null
32 | title: null
33 | type: craft\fieldlayoutelements\entries\EntryTitleField
34 | uid: 467696f6-b326-4dda-833f-6cf5ffc6d2ed
35 | userCondition: null
36 | warning: null
37 | width: 100
38 | -
39 | dateAdded: '2024-10-23T17:26:50+00:00'
40 | elementCondition: null
41 | fieldUid: ab8abc7e-2a4d-4858-98ea-9a6954a434da # Hero
42 | handle: null
43 | includeInCards: false
44 | instructions: null
45 | label: null
46 | providesThumbs: false
47 | required: false
48 | tip: null
49 | type: craft\fieldlayoutelements\CustomField
50 | uid: 25693e05-7ef0-4518-9fc5-2e899504f485
51 | userCondition: null
52 | warning: null
53 | width: 100
54 | -
55 | dateAdded: '2024-10-23T17:26:50+00:00'
56 | elementCondition: null
57 | heading: 'Main Content'
58 | type: craft\fieldlayoutelements\Heading
59 | uid: c8c8df54-5786-47de-80fc-a00ce2555844
60 | userCondition: null
61 | -
62 | dateAdded: '2024-10-23T17:26:50+00:00'
63 | elementCondition: null
64 | fieldUid: 77af5a62-d057-494a-91ac-9edf65b6b266 # Content Builder
65 | handle: null
66 | includeInCards: false
67 | instructions: null
68 | label: null
69 | providesThumbs: false
70 | required: false
71 | tip: null
72 | type: craft\fieldlayoutelements\CustomField
73 | uid: 53da33c9-cd95-43ca-98d3-b1ed3ec87096
74 | userCondition: null
75 | warning: null
76 | width: 100
77 | name: Content
78 | uid: 9768a398-72b1-4c65-aa91-dcad9be74a1f
79 | userCondition: null
80 | -
81 | elementCondition: null
82 | elements:
83 | -
84 | dateAdded: '2024-10-23T17:26:50+00:00'
85 | elementCondition: null
86 | fieldUid: 149ec41c-d6de-4ae5-84db-08d285801dd1 # SEO
87 | handle: null
88 | includeInCards: false
89 | instructions: null
90 | label: null
91 | providesThumbs: false
92 | required: false
93 | tip: null
94 | type: craft\fieldlayoutelements\CustomField
95 | uid: cd01d059-99d4-4f31-a7be-e7ee6686623a
96 | userCondition: null
97 | warning: null
98 | width: 100
99 | name: SEO
100 | uid: b1392c98-ec7a-4fd0-a163-1e2db652424d
101 | userCondition: null
102 | handle: home
103 | hasTitleField: true
104 | icon: house
105 | name: Home
106 | showSlugField: true
107 | showStatusField: true
108 | slugTranslationKeyFormat: ''
109 | slugTranslationMethod: site
110 | titleFormat: '{'
111 | titleTranslationKeyFormat: ''
112 | titleTranslationMethod: site
113 |
--------------------------------------------------------------------------------
/config/project/entryTypes/callToAction--57a74cde-de83-4b69-88ff-a4472daac7f7.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 7d8c40f9-257c-41b4-8747-551f180cacc5:
4 | cardView:
5 | - 'layoutElement:1b392e2e-ab1b-42ce-81a1-01fbd59e5ce6'
6 | tabs:
7 | -
8 | elementCondition: null
9 | elements:
10 | -
11 | dateAdded: '2024-08-10T13:55:01+00:00'
12 | elementCondition: null
13 | fieldUid: c161a9a5-2cf6-4cc3-b0d8-3c8a30395dde # Input
14 | handle: sectionTitle
15 | includeInCards: false
16 | instructions: null
17 | label: 'Section Title'
18 | providesThumbs: false
19 | required: false
20 | tip: null
21 | type: craft\fieldlayoutelements\CustomField
22 | uid: a71662d0-b947-40fe-9aee-693197d4445b
23 | userCondition: null
24 | warning: null
25 | width: 100
26 | -
27 | dateAdded: '2024-08-10T14:14:10+00:00'
28 | elementCondition: null
29 | heading: Button
30 | type: craft\fieldlayoutelements\Heading
31 | uid: 4d3c66b5-b450-43b5-9c31-784ca651934b
32 | userCondition: null
33 | -
34 | dateAdded: '2024-08-10T13:55:01+00:00'
35 | elementCondition: null
36 | fieldUid: 136d3c61-5e7c-4eb4-afc0-5c78565fbe8b # Button
37 | handle: null
38 | includeInCards: false
39 | instructions: null
40 | label: null
41 | providesThumbs: false
42 | required: false
43 | tip: null
44 | type: craft\fieldlayoutelements\CustomField
45 | uid: bdb7e4c4-caa6-40d1-bb93-831a931266f2
46 | userCondition: null
47 | warning: null
48 | width: 100
49 | -
50 | dateAdded: '2024-08-10T13:57:26+00:00'
51 | elementCondition: null
52 | type: craft\fieldlayoutelements\HorizontalRule
53 | uid: c9c6d83f-3770-4b0a-8802-e2a8d180b708
54 | userCondition: null
55 | -
56 | dateAdded: '2024-08-10T13:55:01+00:00'
57 | elementCondition: null
58 | fieldUid: cc618569-5c0e-4ff7-9b4a-2fe9ed27af1f # Background Image
59 | handle: null
60 | includeInCards: false
61 | instructions: null
62 | label: 'Background Image'
63 | providesThumbs: true
64 | required: false
65 | tip: null
66 | type: craft\fieldlayoutelements\CustomField
67 | uid: 4c36cc61-1f7c-4373-91f1-16aa37ce2c5b
68 | userCondition: null
69 | warning: null
70 | width: 100
71 | name: Content
72 | uid: d76b4b4a-101d-4508-8153-84c7205cd9a3
73 | userCondition: null
74 | -
75 | elementCondition: null
76 | elements:
77 | -
78 | dateAdded: '2024-08-10T13:55:01+00:00'
79 | elementCondition: null
80 | fieldUid: 127f0d67-cfaf-4e5d-b3f8-111b7fda6f64 # Padding
81 | handle: null
82 | includeInCards: true
83 | instructions: null
84 | label: Padding
85 | providesThumbs: false
86 | required: false
87 | tip: null
88 | type: craft\fieldlayoutelements\CustomField
89 | uid: 1b392e2e-ab1b-42ce-81a1-01fbd59e5ce6
90 | userCondition: null
91 | warning: null
92 | width: 100
93 | name: Options
94 | uid: 20860368-2cde-47b2-8a45-468b6f3b4fc0
95 | userCondition: null
96 | handle: callToAction
97 | hasTitleField: false
98 | icon: link
99 | name: 'Call To Action'
100 | showSlugField: true
101 | showStatusField: true
102 | slugTranslationKeyFormat: null
103 | slugTranslationMethod: site
104 | titleFormat: null
105 | titleTranslationKeyFormat: null
106 | titleTranslationMethod: site
107 |
--------------------------------------------------------------------------------
/config/project/entryTypes/noticeBar--5bca37e0-a30f-48fd-9fde-3105fb9d9738.yaml:
--------------------------------------------------------------------------------
1 | fieldLayouts:
2 | 051e5080-5716-48d1-8d3d-69b3d850a9ca:
3 | tabs:
4 | -
5 | elementCondition: null
6 | elements:
7 | -
8 | autocapitalize: true
9 | autocomplete: false
10 | autocorrect: true
11 | class: null
12 | dateAdded: '2025-01-27T12:01:38-05:00'
13 | disabled: false
14 | elementCondition: null
15 | id: null
16 | includeInCards: false
17 | inputType: null
18 | instructions: null
19 | label: null
20 | max: null
21 | min: null
22 | name: null
23 | orientation: null
24 | placeholder: null
25 | providesThumbs: false
26 | readonly: false
27 | required: true
28 | size: null
29 | step: null
30 | tip: null
31 | title: null
32 | type: craft\fieldlayoutelements\entries\EntryTitleField
33 | uid: a112464c-3177-4fb9-9327-e01f6f402c5e
34 | userCondition: null
35 | warning: null
36 | width: 100
37 | -
38 | dateAdded: '2025-01-27T12:01:38-05:00'
39 | elementCondition: null
40 | fieldUid: 5489ed3b-28c1-4a26-ac7e-97b0182e6652 # Enable Notice Bar
41 | handle: null
42 | includeInCards: false
43 | instructions: null
44 | label: null
45 | providesThumbs: false
46 | required: false
47 | tip: null
48 | type: craft\fieldlayoutelements\CustomField
49 | uid: 6a3a9669-fd06-48a0-9c6c-7d57a8673df6
50 | userCondition: null
51 | warning: null
52 | width: 50
53 | -
54 | dateAdded: '2025-01-27T12:01:38-05:00'
55 | elementCondition: null
56 | fieldUid: 52f12f1b-ba11-48f3-985d-0ee6e2a6dc4e # Notice Bar Location
57 | handle: null
58 | includeInCards: false
59 | instructions: null
60 | label: null
61 | providesThumbs: false
62 | required: false
63 | tip: null
64 | type: craft\fieldlayoutelements\CustomField
65 | uid: 73f65df1-43ec-4557-8579-cb72ea2554fc
66 | userCondition: null
67 | warning: null
68 | width: 50
69 | -
70 | dateAdded: '2025-01-27T12:01:38-05:00'
71 | elementCondition: null
72 | fieldUid: 136d3c61-5e7c-4eb4-afc0-5c78565fbe8b # Button
73 | handle: null
74 | includeInCards: false
75 | instructions: null
76 | label: null
77 | providesThumbs: false
78 | required: false
79 | tip: null
80 | type: craft\fieldlayoutelements\CustomField
81 | uid: af7d8040-e45a-4132-86a1-9020152c0d10
82 | userCondition: null
83 | warning: null
84 | width: 75
85 | -
86 | dateAdded: '2025-01-27T12:01:38-05:00'
87 | elementCondition: null
88 | fieldUid: da3d7ec4-1d85-47ba-a517-6c81d94cc9d2 # Copy Basic
89 | handle: text
90 | includeInCards: false
91 | instructions: null
92 | label: Text
93 | providesThumbs: false
94 | required: false
95 | tip: null
96 | type: craft\fieldlayoutelements\CustomField
97 | uid: 1af21084-1c75-4add-af7b-4d5443ae4120
98 | userCondition: null
99 | warning: null
100 | width: 100
101 | name: Content
102 | uid: 4678e52f-c995-4149-922a-e84c2d8eb686
103 | userCondition: null
104 | handle: noticeBar
105 | hasTitleField: false
106 | name: 'Notice Bar'
107 | showStatusField: true
108 | slugTranslationKeyFormat: null
109 | slugTranslationMethod: site
110 | sortOrder: 1
111 | titleFormat: '{section.name|raw}'
112 | titleTranslationKeyFormat: null
113 | titleTranslationMethod: site
114 |
--------------------------------------------------------------------------------
/templates/_blocks/hero/sliderHero.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 | {% for slide in block.slides.all() %}
7 |
8 |
9 |
10 | {# image #}
11 |
12 | {% set heroImage = slide.image.one() %}
13 | {{ include('_includes/responsiveImage', {
14 | image: heroImage,
15 | transforms: [
16 | {
17 | mq:'(max-width: 767.9px)',
18 | crop: {
19 | width: 767,
20 | height:300,
21 | mode: 'crop',
22 | quality: 80,
23 | }
24 | },
25 | {
26 | mq:'(max-width: 1199px)',
27 | crop: {
28 | width: 1200,
29 | height:375,
30 | mode: 'crop',
31 | quality: 80,
32 | }
33 | },
34 | {
35 | mq:'(min-width: 1200px)',
36 | crop: {
37 | width: 1920,
38 | height:450,
39 | mode: 'crop',
40 | quality: 80,
41 | }
42 | },
43 | ],
44 | attributes: {
45 | alt: image.altText ?? image.title ?? null,
46 | class: 'object-cover z-0 mx-auto',
47 | loading: 'lazy',
48 | dataAttributes: ''
49 | },
50 | }, with_context = false) }}
51 |
52 | {# slide copy #}
53 |
54 |
55 |
56 | {% if slide.slideTitle|length %}
57 |
{{ slide.slideTitle }}
58 | {% endif %}
59 | {% if slide.copy|length %}
60 |
61 | {{ slide.copy }}
62 |
63 | {% endif %}
64 |
65 | {{ slide.button.getLink({
66 | class: 'btn self-start',
67 | }) }}
68 |
69 |
70 |
71 |
72 | {# end slide copy #}
73 |
74 |
75 |
76 |
77 |
78 |
79 | {% endfor %}
80 |
81 |
82 |
83 |
84 |
85 | {# #}
86 |
87 |
88 | {# prev #}
89 |
{{ svg('@webroot/assets/images/svg/arrow-right-white.svg')|attr({class:'w-10 h-10 inline-block rotate-180' }) }}
90 |
91 | {# next #}
92 |
{{ svg('@webroot/assets/images/svg/arrow-right-white.svg')|attr({class:'w-10 h-10 inline-block' }) }}
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | {% css %}
101 | {# .swiper-button-prev, .swiper-button-next {
102 | width:2.5rem;
103 | }
104 | .swiper-button-next:after {
105 | display:none;
106 | }
107 | .swiper-button-prev:after {
108 | display:none;
109 | } #}
110 | {% endcss %}
111 |
112 |
113 | {# javascript #}
114 | {% js %}
115 | {% include "_javascript/hero-swiper.js" %}
116 | {% endjs %}
117 |
118 |
119 |
120 |
121 |
122 | {#
123 |
124 |
125 |
126 |
127 |
{{ block.heroTitle ?? entry.title }}
128 |
129 |
130 |
131 |
132 |
#}
--------------------------------------------------------------------------------
/config/project/entryTypes/newsListing--e3dea9df-426f-43a5-96fd-927882533aa9.yaml:
--------------------------------------------------------------------------------
1 | color: null
2 | fieldLayouts:
3 | 8f880d21-2d24-4e77-b149-cd95cb26961c:
4 | tabs:
5 | -
6 | elementCondition: null
7 | elements:
8 | -
9 | autocapitalize: true
10 | autocomplete: false
11 | autocorrect: true
12 | class: null
13 | dateAdded: '2025-01-27T11:58:14-05:00'
14 | disabled: false
15 | elementCondition: null
16 | id: null
17 | includeInCards: false
18 | inputType: null
19 | instructions: null
20 | label: null
21 | max: null
22 | min: null
23 | name: null
24 | orientation: null
25 | placeholder: null
26 | providesThumbs: false
27 | readonly: false
28 | required: true
29 | size: null
30 | step: null
31 | tip: null
32 | title: null
33 | type: craft\fieldlayoutelements\entries\EntryTitleField
34 | uid: 5f6b0ffc-3351-4869-b4a4-11aee4c1c5e9
35 | userCondition: null
36 | warning: null
37 | width: 100
38 | -
39 | dateAdded: '2025-01-27T11:58:14-05:00'
40 | dismissible: false
41 | elementCondition: null
42 | style: tip
43 | tip: 'Used when displayed on other pages'
44 | type: craft\fieldlayoutelements\Tip
45 | uid: 94e994eb-e860-427a-b9ad-14780fa0043b
46 | userCondition: null
47 | -
48 | dateAdded: '2025-01-27T11:58:14-05:00'
49 | elementCondition: null
50 | fieldUid: c33fedfd-ec76-45db-93dc-a12697e4a2aa # Listing Image
51 | handle: null
52 | includeInCards: false
53 | instructions: null
54 | label: null
55 | providesThumbs: false
56 | required: false
57 | tip: null
58 | type: craft\fieldlayoutelements\CustomField
59 | uid: 58d96b32-eca0-461b-aabf-c80abc32a5a2
60 | userCondition: null
61 | warning: null
62 | width: 25
63 | -
64 | dateAdded: '2025-01-27T11:58:14-05:00'
65 | elementCondition: null
66 | fieldUid: f90a85bd-91b2-462b-acb4-8f265ded647e # Copy
67 | handle: summary
68 | includeInCards: false
69 | instructions: null
70 | label: Summary
71 | providesThumbs: false
72 | required: false
73 | tip: null
74 | type: craft\fieldlayoutelements\CustomField
75 | uid: 572c63a6-9911-4fba-a9a2-702f8c568e66
76 | userCondition: null
77 | warning: null
78 | width: 75
79 | -
80 | dateAdded: '2025-01-27T11:58:14-05:00'
81 | elementCondition: null
82 | heading: 'Main Content'
83 | type: craft\fieldlayoutelements\Heading
84 | uid: 5e79ceb5-58a6-4e1a-84c0-9d25e1fee295
85 | userCondition: null
86 | name: Content
87 | uid: 00dcba48-c8e6-436c-88cf-4362f6b375cc
88 | userCondition: null
89 | -
90 | elementCondition: null
91 | elements:
92 | -
93 | dateAdded: '2025-01-27T11:58:14-05:00'
94 | elementCondition: null
95 | fieldUid: 149ec41c-d6de-4ae5-84db-08d285801dd1 # SEO
96 | handle: null
97 | includeInCards: false
98 | instructions: null
99 | label: null
100 | providesThumbs: false
101 | required: false
102 | tip: null
103 | type: craft\fieldlayoutelements\CustomField
104 | uid: 2e7499cf-96a5-4586-90e6-9eacb5fdbda7
105 | userCondition: null
106 | warning: null
107 | width: 100
108 | name: SEO
109 | uid: 5c2081a7-07bd-42f2-8c3d-66f1639b113a
110 | userCondition: null
111 | handle: newsListing
112 | hasTitleField: true
113 | icon: newspaper
114 | name: 'News Listing'
115 | showSlugField: true
116 | showStatusField: true
117 | slugTranslationKeyFormat: ''
118 | slugTranslationMethod: site
119 | titleFormat: ''
120 | titleTranslationKeyFormat: ''
121 | titleTranslationMethod: site
122 |
--------------------------------------------------------------------------------
/templates/_components/contact-form.twig:
--------------------------------------------------------------------------------
1 | {{ craft.app.config.general.devMode ? ('') | raw }}
2 |
3 |
4 |
5 |
6 |
7 | {% macro errorList(errors) %}
8 | {% if errors %}
9 | {{ ul(errors, {class: 'errors text-red-500'}) }}
10 | {% endif %}
11 | {% endmacro %}
12 |
13 | {# Sets default values if not defined by the input fields below #}
14 | {% set fromName = fromName ?? '' %}
15 | {% set fromEmail = fromEmail ?? '' %}
16 | {% set subject = subject ?? '' %}
17 | {% set message = message ?? '' %}
18 |
19 | {# The `success` variable is defined by the contact form controller on success #}
20 | {% if success is defined and success %}
21 | {# success message here #}
22 |
23 |
{{ fromName }}, Your message was successfully sent!
24 |
25 | Sender Name: {{ fromName }}
26 | Sender Email: {{ fromEmail }}
27 | Subject: {{ subject }}
28 |
29 |
30 | Message:
31 | {{ message|nl2br }}
32 |
33 |
34 |
35 | {% else %}
36 | {# display the form not on the success page #}
37 |
103 | {% endif %}
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/config/project/users/groups/siteAdmin--0878c4de-b946-4c8e-bcce-fe18cd77a73e.yaml:
--------------------------------------------------------------------------------
1 | description: null
2 | handle: siteAdmin
3 | name: 'Site Admin'
4 | permissions:
5 | - accesscp
6 | - accessplugin-seomatic
7 | - accessplugin-usermanual
8 | - 'assignusergroup:0878c4de-b946-4c8e-bcce-fe18cd77a73e' # Site Admin
9 | - 'createentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
10 | - 'createentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
11 | - 'createfolders:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
12 | - 'createfolders:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
13 | - 'deleteassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
14 | - 'deleteassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
15 | - 'deleteentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
16 | - 'deleteentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
17 | - 'deletepeerassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
18 | - 'deletepeerassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
19 | - 'deletepeerentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
20 | - 'deletepeerentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
21 | - 'deletepeerentrydrafts:29d88d99-dd38-43f6-9ac5-3438833c75ba' # Error 404
22 | - 'deletepeerentrydrafts:408314ae-e32d-471b-a729-25f4ce759ac4' # Notice Bar
23 | - 'deletepeerentrydrafts:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
24 | - 'deletepeerentrydrafts:9c12e5ad-18e9-498f-bf50-489513409007' # News
25 | - 'editglobalset:415a954c-eb55-4533-9ffd-64b3eade9469' # Fallback
26 | - 'editimages:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
27 | - 'editimages:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
28 | - 'editpeerimages:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
29 | - 'editpeerimages:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
30 | - 'editsite:1a78d395-d81a-4b77-8da7-30a49123bbee' # English
31 | - 'editsite:b9fdef79-5b63-4932-a9aa-8d18f937e6d9' # Français
32 | - 'replacefiles:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
33 | - 'replacefiles:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
34 | - 'replacepeerfiles:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
35 | - 'replacepeerfiles:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
36 | - 'saveassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
37 | - 'saveassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
38 | - 'saveentries:29d88d99-dd38-43f6-9ac5-3438833c75ba' # Error 404
39 | - 'saveentries:408314ae-e32d-471b-a729-25f4ce759ac4' # Notice Bar
40 | - 'saveentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
41 | - 'saveentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
42 | - 'savepeerassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
43 | - 'savepeerassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
44 | - 'savepeerentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
45 | - 'savepeerentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
46 | - 'savepeerentrydrafts:29d88d99-dd38-43f6-9ac5-3438833c75ba' # Error 404
47 | - 'savepeerentrydrafts:408314ae-e32d-471b-a729-25f4ce759ac4' # Notice Bar
48 | - 'savepeerentrydrafts:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
49 | - 'savepeerentrydrafts:9c12e5ad-18e9-498f-bf50-489513409007' # News
50 | - 'seomatic:content-meta'
51 | - 'seomatic:content-meta:facebook'
52 | - 'seomatic:content-meta:general'
53 | - 'seomatic:content-meta:sitemap'
54 | - 'seomatic:content-meta:twitter'
55 | - 'seomatic:dashboard'
56 | - 'seomatic:global-meta'
57 | - 'seomatic:global-meta:facebook'
58 | - 'seomatic:global-meta:general'
59 | - 'seomatic:global-meta:robots'
60 | - 'seomatic:global-meta:twitter'
61 | - 'seomatic:site-settings'
62 | - 'seomatic:site-settings:identity'
63 | - 'seomatic:site-settings:sitemap'
64 | - 'seomatic:site-settings:social'
65 | - 'seomatic:tracking-scripts'
66 | - 'seomatic:tracking-scripts:googleanalytics'
67 | - 'seomatic:tracking-scripts:googletagmanager'
68 | - 'seomatic:tracking-scripts:gtag'
69 | - 'utility:asset-indexes'
70 | - 'utility:db-backup'
71 | - 'utility:system-report'
72 | - 'viewassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
73 | - 'viewassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
74 | - 'viewentries:29d88d99-dd38-43f6-9ac5-3438833c75ba' # Error 404
75 | - 'viewentries:408314ae-e32d-471b-a729-25f4ce759ac4' # Notice Bar
76 | - 'viewentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
77 | - 'viewentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
78 | - 'viewpeerassets:70f5d47b-4830-4d51-95fe-bc0f7ccc0670' # Uploads
79 | - 'viewpeerassets:d19b4314-0267-4e95-9e63-2462a334eea1' # User Guide
80 | - 'viewpeerentries:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
81 | - 'viewpeerentries:9c12e5ad-18e9-498f-bf50-489513409007' # News
82 | - 'viewpeerentrydrafts:29d88d99-dd38-43f6-9ac5-3438833c75ba' # Error 404
83 | - 'viewpeerentrydrafts:408314ae-e32d-471b-a729-25f4ce759ac4' # Notice Bar
84 | - 'viewpeerentrydrafts:666b31c2-d6d5-4e80-b9aa-f57b66d5b54a' # Pages
85 | - 'viewpeerentrydrafts:9c12e5ad-18e9-498f-bf50-489513409007' # News
86 |
--------------------------------------------------------------------------------
/templates/_layout.twig:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 | {#
14 | google fonts
15 | go locally hosted google fonts before
16 | launching the live site - this will improve
17 | page speed scores and site performance
18 | https://gwfh.mranftl.com/fonts
19 | #}
20 |
21 |
22 | {# end google #}
23 |
24 |
27 |
28 | {# vendor css #}
29 |
30 | {# site css #}
31 |
32 |
33 |
34 |
35 | {# for safari https://medium.com/swlh/are-you-using-svg-favicons-yet-a-guide-for-modern-browsers-836a6aace3df #}
36 |
37 |
38 |
39 | {% block pageCss %}{% endblock %}
40 |
41 |
42 |
43 |
44 |
45 | {# set site name from DOTENV variable based on current site language #}
46 | {% if craft.app.language == 'en' %}
47 | {% set siteName = getenv('SITE_NAME_EN') %}
48 | {% endif %}
49 | {% if craft.app.language == 'fr' %}
50 | {% set siteName = getenv('SITE_NAME_FR') %}
51 | {% endif %}
52 |
53 |