├── .dockerignore ├── .env.example ├── .github ├── CODEOWNERS └── workflows │ └── push.yaml ├── .gitignore ├── Dockerfile ├── LICENSE.md ├── README.md ├── composer.json ├── composer.lock ├── config ├── app.php ├── db.php ├── general.php ├── project │ ├── entryTypes │ │ ├── about--6ef72b30-6af9-4545-81e9-b2c900cd08d4.yaml │ │ ├── article--eba60966-6218-4985-b901-fff1e5f97a49.yaml │ │ ├── homepage--1f72a359-0ce9-4415-82dc-88dc833073c3.yaml │ │ ├── link--b31c607b-b75a-4a78-b14b-d94bf8faa0c3.yaml │ │ ├── locations--ae84d93c-8a94-4605-bf08-11ada918f964.yaml │ │ ├── services--c09d31ed-3004-484c-89ef-e9d262f31f00.yaml │ │ ├── servicesIndex--7f0d6d70-ed28-45f1-88c0-4463e96f110f.yaml │ │ ├── work--01416786-fb23-483e-9b86-d70279bf18a9.yaml │ │ └── workIndex--261c3cde-2d6c-4b23-b6cd-6def95992cf8.yaml │ ├── fieldGroups │ │ ├── 0815347a-8e73-45fd-93c9-2244ac562559.yaml │ │ ├── 0d0b7e16-8d7c-4d6f-9059-d11c473058f4.yaml │ │ ├── 8b4aae04-76ef-48c2-a294-e81064a470ed.yaml │ │ ├── d58a1faa-0bf6-46b2-b880-b0c14bebca75.yaml │ │ ├── f00e1793-0757-46e5-99e9-016b21359ac7.yaml │ │ └── f7189ca2-4b93-4661-830a-a71aff8aa3cd.yaml │ ├── fields │ │ ├── address--422c7da9-d3e4-4d0a-8225-bbbc8264f029.yaml │ │ ├── articleBody--82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e.yaml │ │ ├── backgroundColor--cdcff4b0-ece0-4d03-8d9f-6ab5939c1bea.yaml │ │ ├── body--08f8ec90-f7ad-4d40-9880-3c96304f1e4e.yaml │ │ ├── clientLogos--950b3c0e-9780-4487-a881-23d96d6075d5.yaml │ │ ├── contactMethods--b01498fe-6db2-4b1d-84d2-8cd0cb62f449.yaml │ │ ├── contactUsLabel--fcf41a5f-68b5-42dd-8ca1-cc457eb749f0.yaml │ │ ├── copyrightNotice--5095500e-4962-429c-9b9c-7a4d0d4f930c.yaml │ │ ├── email--b75266c9-d8d2-42ae-9024-0fecb8bdc994.yaml │ │ ├── featuredEntry--a171d498-9024-4855-9a6c-b3b96765ab7c.yaml │ │ ├── featuredImage--0cbb9736-a84b-4e83-803c-5077f56394a9.yaml │ │ ├── featuredThumb--0305c984-3934-4c7a-9de9-b0162c5b0112.yaml │ │ ├── heading--9bb293f8-c659-4035-b5d3-e30dbf8d1c5b.yaml │ │ ├── heroImage--a2129d62-1d81-4c2f-a92d-81c03ed120dc.yaml │ │ ├── indexHeading--67ff16f0-04e2-492b-b999-a7d364331d80.yaml │ │ ├── linkUrl--4ca9d3b8-ff02-403a-9010-45763fcdea9f.yaml │ │ ├── serviceBody--9bf9e642-2881-44b4-99ff-2cbed3ccc2d7.yaml │ │ ├── serviceIcon--d96355a7-1353-4097-bf08-3bd5c44821f8.yaml │ │ ├── servicesPerformed--a988d6b4-6983-48e6-b08e-8fd72e31e483.yaml │ │ ├── shortDescription--aef80333-1412-4130-bb84-ac3bdbbcbbe2.yaml │ │ ├── subheading--674e53a6-d62c-4322-ae09-349765f1ef17.yaml │ │ └── testimonials--8823155c-e84a-4a38-af30-2cb88b705e7b.yaml │ ├── globalSets │ │ └── footer--8dbeba09-2202-4eb4-8f3c-b15633a4830d.yaml │ ├── graphql │ │ ├── graphql.yaml │ │ └── schemas │ │ │ └── 992fb441-6b13-4051-aacd-e39943354507.yaml │ ├── imageTransforms │ │ ├── medium--36f99c8f-0ba4-4e4c-af7d-a07dee715ac1.yaml │ │ ├── small--726664b6-90aa-4fa9-9d03-23be4ba628bc.yaml │ │ └── thumb--0f910d7c-0ba2-476a-a7c9-fa489255e601.yaml │ ├── matrixBlockTypes │ │ ├── contactMethod--ecd6fdce-8d11-4aa6-a167-e731757515c6.yaml │ │ ├── gallery--0f3ede99-8b78-4042-85c9-422f57f5b01b.yaml │ │ ├── heading--1d5e20da-bc96-4a33-b045-8d1fa5870e74.yaml │ │ ├── image--9123201b-837c-4269-9d7c-d5e11bba1e2b.yaml │ │ ├── newSection--e1c6c95e-a19b-4cd8-9a83-935e91f862c0.yaml │ │ ├── pullQuote--daa4f1b9-ebde-4b0e-9cf3-027bf3b8b890.yaml │ │ ├── quote--97ff3c80-2398-4ca5-9d03-c3b8727c6eb2.yaml │ │ ├── servicesPoint--aa39e3a4-2d2c-4ed2-a9b5-74122ece5947.yaml │ │ ├── testimonial--b3d2e2ed-d430-48c9-b89f-a38a7f8ea8b3.yaml │ │ └── text--070be8db-f9b0-4605-98ae-e9b54b1af3f6.yaml │ ├── project.yaml │ ├── routes │ │ ├── 222c9203-357b-45a9-ab56-ad4df20ad9a0.yaml │ │ └── f2315ceb-90c3-45fe-b6c1-0b847b577a68.yaml │ ├── sections │ │ ├── about--1a1f289d-3e32-4409-bfb2-03ec7e7d1b81.yaml │ │ ├── homepage--735318f3-e53c-4ce1-8dad-4c7a5c7c5bee.yaml │ │ ├── locations--45d3a977-dc34-4bff-a39f-425e100a5e6f.yaml │ │ ├── news--f5969f9a-8d3f-487e-9695-cc4e5fbe5efd.yaml │ │ ├── services--f6b0cb16-5df8-4b57-9856-c9c2d6b9699e.yaml │ │ ├── servicesIndex--5fa323b7-9755-4174-bed2-0f2b11c05701.yaml │ │ ├── work--b3a9eef3-9444-4995-84e2-6dc6b60aebd2.yaml │ │ └── workIndex--1ff1d4d0-499c-41b9-b071-77031c901052.yaml │ ├── siteGroups │ │ └── 268c3c49-6715-4b6a-a1b9-f27313adabd1.yaml │ ├── sites │ │ └── en--06f4e499-3cdc-4d64-aec2-9a7d3a143c75.yaml │ └── volumes │ │ ├── companyLogos--7d6a9bef-727c-4a0c-9791-4f423956de69.yaml │ │ ├── serviceIcons--3fc34ff2-8da7-4a35-8147-f0a2e01392b9.yaml │ │ ├── siteAssets--0193dc64-5499-4e28-95dd-f8f603154851.yaml │ │ └── userPhotos--1f0ea10d-2be0-4638-88da-105d232f4787.yaml ├── redactor │ ├── Simple.json │ └── Standard.json └── routes.php ├── craft ├── craft.bat ├── gruntfile.js ├── happylager.sql ├── modules └── Module.php ├── package-lock.json ├── package.json ├── storage ├── .gitignore ├── config-deltas │ └── .gitignore ├── rebrand │ ├── icon │ │ └── hl.svg │ └── logo │ │ └── happylager.svg └── userphotos │ └── .gitignore ├── templates ├── _includes │ ├── article_body.html │ ├── article_heading.html │ ├── content_header.html │ └── index_heading.html ├── _layouts │ ├── base.html │ └── site.html ├── about │ └── index.html ├── index.html ├── news │ ├── _entry.html │ └── index.html ├── search │ └── _results.html ├── services │ ├── _entry.html │ └── _index.html └── work │ ├── _entry.html │ └── _index.html └── web ├── .htaccess ├── assets ├── css │ ├── happylager.css │ └── sass │ │ ├── _grid.scss │ │ ├── _icomoon.scss │ │ ├── _reset.scss │ │ ├── _type.scss │ │ └── happylager.scss ├── fonts │ ├── generator_config.txt │ ├── happylager.eot │ ├── happylager.svg │ ├── happylager.ttf │ ├── happylager.woff │ ├── leaguegothic-condenseditalic-demo.html │ ├── leaguegothic-condenseditalic-webfont.eot │ ├── leaguegothic-condenseditalic-webfont.svg │ ├── leaguegothic-condenseditalic-webfont.ttf │ ├── leaguegothic-condenseditalic-webfont.woff │ ├── leaguegothic-condensedregular-demo.html │ ├── leaguegothic-condensedregular-webfont.eot │ ├── leaguegothic-condensedregular-webfont.svg │ ├── leaguegothic-condensedregular-webfont.ttf │ ├── leaguegothic-condensedregular-webfont.woff │ ├── leaguegothic-italic-demo.html │ ├── leaguegothic-italic-webfont.eot │ ├── leaguegothic-italic-webfont.svg │ ├── leaguegothic-italic-webfont.ttf │ ├── leaguegothic-italic-webfont.woff │ ├── leaguegothic-regular-demo.html │ ├── leaguegothic-regular-webfont.eot │ ├── leaguegothic-regular-webfont.svg │ ├── leaguegothic-regular-webfont.ttf │ ├── leaguegothic-regular-webfont.woff │ ├── montserrat-bold-demo.html │ ├── montserrat-bold-webfont.eot │ ├── montserrat-bold-webfont.svg │ ├── montserrat-bold-webfont.ttf │ ├── montserrat-bold-webfont.woff │ ├── montserrat-regular-demo.html │ ├── montserrat-regular-webfont.eot │ ├── montserrat-regular-webfont.svg │ ├── montserrat-regular-webfont.ttf │ ├── montserrat-regular-webfont.woff │ ├── sedgwick_co-demo.html │ ├── sedgwick_co-webfont.eot │ ├── sedgwick_co-webfont.svg │ ├── sedgwick_co-webfont.ttf │ ├── sedgwick_co-webfont.woff │ ├── southernaire_personal_use_only-demo.html │ ├── southernaire_personal_use_only-webfont.eot │ ├── southernaire_personal_use_only-webfont.svg │ ├── southernaire_personal_use_only-webfont.ttf │ ├── southernaire_personal_use_only-webfont.woff │ ├── specimen_files │ │ ├── easytabs.js │ │ ├── grid_12-825-55-15.css │ │ └── specimen_stylesheet.css │ ├── steelfish_bd-demo.html │ ├── steelfish_bd-webfont.eot │ ├── steelfish_bd-webfont.svg │ ├── steelfish_bd-webfont.ttf │ ├── steelfish_bd-webfont.woff │ ├── stylesheet.css │ ├── turnpike-demo.html │ ├── turnpike-webfont.eot │ ├── turnpike-webfont.svg │ ├── turnpike-webfont.ttf │ └── turnpike-webfont.woff ├── images │ ├── about-background-image-1.jpg │ ├── glassfull.png │ ├── happylager.svg │ ├── headingbg-blue.svg │ ├── headingbg-gray.svg │ ├── headingbg-orange.svg │ ├── headingbg-yellow.svg │ ├── hl.svg │ ├── how-made-background.jpg │ ├── icon-arrow-alt.svg │ ├── icon-arrow-white.svg │ ├── icon-arrow.svg │ ├── icon-beaker.png │ ├── icon-beer.png │ ├── icon-beercan.png │ ├── icon-news.png │ ├── icon-news.svg │ ├── icon-quote.svg │ ├── icon-wrenches.svg │ ├── larry-page.png │ ├── nav-sel.svg │ ├── quote-bubble.png │ ├── service-icons │ │ ├── app-development.svg │ │ ├── design.svg │ │ ├── development.svg │ │ ├── email-marketing.svg │ │ ├── seo.svg │ │ └── strategy.svg │ ├── skis.jpg │ ├── social-sprite.png │ ├── testimonials-background.jpg │ └── wired.svg ├── js │ ├── master.js │ └── master.min.js ├── logos │ ├── logo-Jetblue.png │ ├── logo-coke.png │ ├── logo-google.png │ ├── logo-mtv.png │ └── logo-newbelgium.png └── site │ ├── app-development.jpg │ ├── augmented-reality-icons.png │ ├── augmented-reality.jpg │ ├── awesome-cities.jpg │ ├── bar.jpg │ ├── bike.jpg │ ├── bob-guff.png │ ├── chicago-office.jpg │ ├── coffee-shop.jpg │ ├── create-genius.jpg │ ├── development.jpg │ ├── discover.jpg │ ├── diva-bigimage.jpg │ ├── diva-cover.jpg │ ├── diva-interface-detail.png │ ├── diva-interface-work.jpg │ ├── diva-mobile-detail.png │ ├── email-marketing.jpg │ ├── explore.jpg │ ├── fist.jpg │ ├── gallery.png │ ├── glasses.jpg │ ├── hero-image.jpg │ ├── laptop-desk.jpg │ ├── larry-page.png │ ├── macbook-table.jpg │ ├── macbook.jpg │ ├── moosic-app-ui.jpg │ ├── news-entry-1-image.jpg │ ├── news-link-1-image.jpg │ ├── news-link-2-image.jpg │ ├── on-track-thumb.jpg │ ├── ontrack-bigimage.jpg │ ├── pong.png │ ├── ryan-reynolds.png │ ├── seo.jpg │ ├── skateboard.jpg │ ├── skis.jpg │ ├── sports-r-us-thumb.jpg │ ├── sportsrus-bigfeature.jpg │ ├── staff │ ├── crystal.jpg │ ├── liz.jpg │ └── travis.jpg │ ├── strategy.jpg │ ├── video.jpg │ └── water-barley-hops.jpg ├── cpresources └── .gitignore ├── index.php └── web.config /.dockerignore: -------------------------------------------------------------------------------- 1 | vendor 2 | *.env* 3 | -------------------------------------------------------------------------------- /.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=127.0.0.1 13 | DB_PORT=3306 14 | DB_DATABASE= 15 | DB_USER=root 16 | DB_PASSWORD= 17 | DB_SCHEMA=public 18 | DB_TABLE_PREFIX= 19 | 20 | # The URI segment that tells Craft to load the control panel 21 | CP_TRIGGER=admin 22 | 23 | # The base site URL 24 | SITE_URL=http://happylager.test 25 | 26 | # The asset base path 27 | ASSET_BASE_PATH=./assets 28 | 29 | # The asset base URL 30 | ASSET_BASE_URL=/assets 31 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @brandonkelly @angrybrad -------------------------------------------------------------------------------- /.github/workflows/push.yaml: -------------------------------------------------------------------------------- 1 | name: Build and Push Docker Images 2 | 3 | on: 4 | push: 5 | branches: [main, beta] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | name: Build and push to Docker Hub 14 | steps: 15 | - name: Check out the repository 16 | uses: actions/checkout@v2 17 | 18 | - name: Set up QEMU 19 | uses: docker/setup-qemu-action@v1 20 | 21 | - name: Set up Docker Buildx 22 | uses: docker/setup-buildx-action@v1 23 | with: 24 | install: true 25 | 26 | - name: Login to Docker Hub 27 | uses: docker/login-action@v1 28 | with: 29 | username: ${{ secrets.DOCKERHUB_USERNAME }} 30 | password: ${{ secrets.DOCKERHUB_TOKEN }} 31 | 32 | - name: Build craftcms/demo-happylager:latest 33 | uses: docker/build-push-action@v2 34 | if: ${{ github.ref == 'refs/heads/main' }} 35 | with: 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: craftcms/demo-happylager:latest 39 | 40 | - name: Build craftcms/demo-happylager:beta 41 | uses: docker/build-push-action@v2 42 | if: ${{ github.ref == 'refs/heads/beta' }} 43 | with: 44 | push: true 45 | platforms: linux/amd64,linux/arm64 46 | tags: craftcms/demo-happylager:beta 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.env 2 | /.idea 3 | /vendor 4 | .DS_Store 5 | *.sass-cache/ 6 | node_modules 7 | *config.codekit 8 | web/assets/site/_* 9 | web/assets/site/*/_* 10 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # use a multi-stage build for dependencies 2 | FROM composer as vendor 3 | COPY composer.json composer.json 4 | COPY composer.lock composer.lock 5 | RUN composer install --ignore-platform-reqs --no-interaction --prefer-dist 6 | 7 | FROM craftcms/nginx:8.0 8 | 9 | # switch to the root user to install mysql tools 10 | USER root 11 | RUN apk add --no-cache mysql-client libpng libpng-dev libjpeg libjpeg-turbo freetype freetype-dev libjpeg-turbo-dev libzip-dev gd && docker-php-ext-configure gd --with-freetype --with-jpeg && apk del --no-cache libpng-dev freetype-dev libjpeg-turbo-dev 12 | USER www-data 13 | 14 | # the user is `www-data`, so we copy the files using the user and group 15 | COPY --chown=www-data:www-data --from=vendor /app/vendor/ /app/vendor/ 16 | COPY --chown=www-data:www-data . . 17 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) Pixel & Tonic, Inc. 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted. 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 7 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 8 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 9 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 10 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 11 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 12 | PERFORMANCE OF THIS SOFTWARE. 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Happy Lager Craft CMS Demo Site 2 | 3 | This repo contains all of the templates, front-end resources, and a MySQL database backup for “Happy Lager”, a Craft demo site. 4 | 5 | You can find out more about Craft at [craftcms.com](https://craftcms.com/). 6 | 7 | ## Features 8 | 9 | Happy Lager takes advantage of several Craft features: 10 | 11 | #### Sections 12 | 13 | The content in Happy Lager is managed from the following [sections](https://docs.craftcms.com/v3/sections-and-entries.html#sections): 14 | 15 | * Four “Single” sections: 16 | - Homepage 17 | - About 18 | - Services Index 19 | - Work Index 20 | * Two “Channel” sections: 21 | - News 22 | - Work 23 | * Two “Structure” sections: 24 | - Locations 25 | - Services 26 | 27 | #### Entry Types 28 | 29 | The News section has two [entry types](https://docs.craftcms.com/v3/sections-and-entries.html#entry-types): 30 | 31 | * **Article** – used to store news articles 32 | * **Link** – used to store links to articles on other websites 33 | 34 | #### Matrix Fields 35 | 36 | This site has the following [Matrix fields](https://docs.craftcms.com/v3/matrix-fields.html): 37 | 38 | * **Article Body** – used to store the varying content of the About page and News, Services, and Work entries. 39 | * **Contact Methods** – used to store Locations’ various contact methods. 40 | * **Services Body** – used to store information about the Services. 41 | * **Testimonials** – used to store the Homepage testimonials. 42 | 43 | #### Relations 44 | 45 | This site has the following [relational fields](https://docs.craftcms.com/v3/relations.html#terminology): 46 | 47 | * **Services Performed** _(Entries)_ – used to relate Work entries to the relevant Services entries. 48 | * **Client Logos** _(Assets)_ – used to related the Homepage to the logos that should be displayed in the “Our Best Drinking Buddies” section. 49 | * **Featured Image** _(Assets)_ – used to relate a featured image to News, Work, Services, and Locations entries. 50 | * **Featured Thumb** _(Assets)_ – used to relate a featured thumbnail to Work entries. 51 | * **Hero Image** _(Assets)_ – used to relate a hero image to the Homepage. 52 | * **Service Icon** _(Assets)_ – used to relate an icon to Services entries. 53 | * There are additional Assets fields within the “Article Body” and “Service Body” Matrix fields. 54 | 55 | #### Assets 56 | 57 | This site has the following [asset volumes](https://docs.craftcms.com/v3/assets.html): 58 | 59 | * **Site Assets** – used to store all miscellaneous site imagery. 60 | * **Company Logos** – used to store the company logos that are displayed on the Homepage. 61 | * **Service Icons** – used to store Services’ icons. 62 | 63 | 64 | ## Installation 65 | 66 | You can check out Happy Lager online from [demo.craftcms.com](https://demo.craftcms.com/). 67 | 68 | If you want to install the site locally, follow these instructions: 69 | 70 | 1. Download/clone the repo on your computer: 71 | 72 | ```bash 73 | git clone https://github.com/craftcms/demo.git happylager.test 74 | ``` 75 | 76 | 2. Run `composer install` within the clone: 77 | 78 | ```bash 79 | cd happylager.test 80 | composer install 81 | ``` 82 | 83 | 3. Copy the `.env.example` file at the root of the project to `.env`, and set its `DB_SERVER`, `DB_USER`, and `DB_PASSWORD` variables to the correct values. (If you’re on a Mac, you may need to type Command + Shift + . in Finder to show hidden files.) 84 | 85 | 4. Ensure that the following files and directories have permissions that will allow PHP to read and write to them: 86 | 87 | - `.env` 88 | - `composer.json` 89 | - `composer.lock` 90 | - `config/license.key` 91 | - `storage/*` 92 | - `vendor/*` 93 | - `web/cpresources/*` 94 | 95 | 5. Run this command in the CLI from your project's root to automatically generate a security key for the site: `php craft setup/security-key` 96 | 97 | 6. Create a new MySQL database called `happylager`, and import `happylager.sql` into it. 98 | 99 | 7. Create a new virtual host with the hostname `happylager.test` that points to the `happylager.test/web/` folder. 100 | 101 | 8. Edit your `hosts` file to resolve `happylager.test` to `127.0.0.1`, if necessary. 102 | 103 | Now point your browser at `http://happylager.test`. You should see the Happy Lager homepage. 104 | 105 | ## Logging in 106 | 107 | The Craft Control Panel is located at `http://happylager.test/admin`. You can log in with the following credentials: 108 | 109 | * Username: `admin` 110 | * Password: `password` 111 | 112 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "php": ">=7.0.0", 4 | "craftcms/cms": "^3.6.17", 5 | "vlucas/phpdotenv": "^2.4.0", 6 | "craftcms/redactor": "^2.8.7" 7 | }, 8 | "autoload": { 9 | "psr-4": { 10 | "modules\\": "modules/" 11 | } 12 | }, 13 | "config": { 14 | "optimize-autoloader": true, 15 | "platform": { 16 | "php": "8.0" 17 | } 18 | }, 19 | "scripts": { 20 | "post-root-package-install": [ 21 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 22 | ] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'my-module' => \modules\Module::class, 19 | ], 20 | //'bootstrap' => ['my-module'], 21 | ]; 22 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /config/general.php: -------------------------------------------------------------------------------- 1 | 1, 20 | 21 | // Whether generated URLs should omit "index.php" 22 | 'omitScriptNameInUrls' => true, 23 | 24 | // The URI segment that tells Craft to load the control panel 25 | 'cpTrigger' => App::env('CP_TRIGGER') ?: 'admin', 26 | 27 | // The secure key Craft will use for hashing and encrypting data 28 | 'securityKey' => App::env('SECURITY_KEY'), 29 | 30 | // Whether Dev Mode should be enabled (see https://craftcms.com/guides/what-dev-mode-does) 31 | 'devMode' => $isDev, 32 | 33 | // Whether administrative changes should be allowed 34 | 'allowAdminChanges' => true, 35 | 36 | // Whether updates should be allowed 37 | 'allowUpdates' => $isDev, 38 | 39 | // Whether crawlers should be allowed to index pages and following links 40 | 'disallowRobots' => !$isProd, 41 | 42 | 'aliases' => [ 43 | '@assetBasePath' => App::env('ASSET_BASE_PATH') ?: "./assets", 44 | '@assetBaseUrl' => App::env('ASSET_BASE_URL') ?: "/assets", 45 | ], 46 | ]; 47 | -------------------------------------------------------------------------------- /config/project/entryTypes/about--6ef72b30-6af9-4545-81e9-b2c900cd08d4.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | 4cc2a302-6fe7-4f8b-b01b-517ed624cdf7: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: 9bb293f8-c659-4035-b5d3-e30dbf8d1c5b # Heading 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 08f8ec90-f7ad-4d40-9880-3c96304f1e4e # Body 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | name: Content 57 | sortOrder: 1 58 | handle: about 59 | hasTitleField: false 60 | name: About 61 | section: 1a1f289d-3e32-4409-bfb2-03ec7e7d1b81 # About 62 | sortOrder: 0 63 | titleFormat: '{section.name|raw}' 64 | titleTranslationKeyFormat: null 65 | titleTranslationMethod: site 66 | -------------------------------------------------------------------------------- /config/project/entryTypes/article--eba60966-6218-4985-b901-fff1e5f97a49.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | d45c4454-78e5-415c-8e08-700061feb9b4: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: a171d498-9024-4855-9a6c-b3b96765ab7c # Featured? 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 0cbb9736-a84b-4e83-803c-5077f56394a9 # Featured Image 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: aef80333-1412-4130-bb84-ac3bdbbcbbe2 # Short Description 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | - 57 | fieldUid: 9bb293f8-c659-4035-b5d3-e30dbf8d1c5b # Heading 58 | instructions: null 59 | label: null 60 | required: '0' 61 | tip: null 62 | type: craft\fieldlayoutelements\CustomField 63 | warning: null 64 | width: 100 65 | - 66 | fieldUid: 674e53a6-d62c-4322-ae09-349765f1ef17 # Subheading 67 | instructions: null 68 | label: null 69 | required: '0' 70 | tip: null 71 | type: craft\fieldlayoutelements\CustomField 72 | warning: null 73 | width: 100 74 | - 75 | fieldUid: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 76 | instructions: null 77 | label: null 78 | required: '0' 79 | tip: null 80 | type: craft\fieldlayoutelements\CustomField 81 | warning: null 82 | width: 100 83 | name: Content 84 | sortOrder: 1 85 | handle: article 86 | hasTitleField: true 87 | name: Article 88 | section: f5969f9a-8d3f-487e-9695-cc4e5fbe5efd # News 89 | sortOrder: 0 90 | titleFormat: null 91 | titleTranslationKeyFormat: null 92 | titleTranslationMethod: site 93 | -------------------------------------------------------------------------------- /config/project/entryTypes/homepage--1f72a359-0ce9-4415-82dc-88dc833073c3.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | 31a1e163-6326-436a-9feb-53b372c086e3: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: a2129d62-1d81-4c2f-a92d-81c03ed120dc # Hero Image 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 8823155c-e84a-4a38-af30-2cb88b705e7b # Testimonials 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: 950b3c0e-9780-4487-a881-23d96d6075d5 # Client Logos 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | name: Content 57 | sortOrder: 1 58 | handle: homepage 59 | hasTitleField: false 60 | name: Homepage 61 | section: 735318f3-e53c-4ce1-8dad-4c7a5c7c5bee # Homepage 62 | sortOrder: 0 63 | titleFormat: '{section.name|raw}' 64 | titleTranslationKeyFormat: null 65 | titleTranslationMethod: site 66 | -------------------------------------------------------------------------------- /config/project/entryTypes/link--b31c607b-b75a-4a78-b14b-d94bf8faa0c3.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | b89ba12c-3f9b-4e8d-a190-073678e01175: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: aef80333-1412-4130-bb84-ac3bdbbcbbe2 # Short Description 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 0cbb9736-a84b-4e83-803c-5077f56394a9 # Featured Image 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: 4ca9d3b8-ff02-403a-9010-45763fcdea9f # Link URL 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | name: Content 57 | sortOrder: 1 58 | handle: link 59 | hasTitleField: true 60 | name: Link 61 | section: f5969f9a-8d3f-487e-9695-cc4e5fbe5efd # News 62 | sortOrder: 0 63 | titleFormat: null 64 | titleTranslationKeyFormat: null 65 | titleTranslationMethod: site 66 | -------------------------------------------------------------------------------- /config/project/entryTypes/locations--ae84d93c-8a94-4605-bf08-11ada918f964.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | a8b59f73-6bdb-4ac9-901b-3894585018fb: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: 0cbb9736-a84b-4e83-803c-5077f56394a9 # Featured Image 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 422c7da9-d3e4-4d0a-8225-bbbc8264f029 # Address 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: b01498fe-6db2-4b1d-84d2-8cd0cb62f449 # Contact Methods 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | - 57 | fieldUid: b75266c9-d8d2-42ae-9024-0fecb8bdc994 # Email 58 | instructions: null 59 | label: null 60 | required: '0' 61 | tip: null 62 | type: craft\fieldlayoutelements\CustomField 63 | warning: null 64 | width: 100 65 | name: Content 66 | sortOrder: 1 67 | handle: locations 68 | hasTitleField: true 69 | name: Locations 70 | section: 45d3a977-dc34-4bff-a39f-425e100a5e6f # Locations 71 | sortOrder: 0 72 | titleFormat: null 73 | titleTranslationKeyFormat: null 74 | titleTranslationMethod: site 75 | -------------------------------------------------------------------------------- /config/project/entryTypes/services--c09d31ed-3004-484c-89ef-e9d262f31f00.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | c06e2a9b-cc41-4ff9-ac5e-0d463b45e764: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: 0cbb9736-a84b-4e83-803c-5077f56394a9 # Featured Image 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: d96355a7-1353-4097-bf08-3bd5c44821f8 # Service Icon 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: aef80333-1412-4130-bb84-ac3bdbbcbbe2 # Short Description 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | - 57 | fieldUid: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 58 | instructions: null 59 | label: null 60 | required: '0' 61 | tip: null 62 | type: craft\fieldlayoutelements\CustomField 63 | warning: null 64 | width: 100 65 | - 66 | fieldUid: 9bf9e642-2881-44b4-99ff-2cbed3ccc2d7 # Service Body 67 | instructions: null 68 | label: null 69 | required: '0' 70 | tip: null 71 | type: craft\fieldlayoutelements\CustomField 72 | warning: null 73 | width: 100 74 | name: Content 75 | sortOrder: 1 76 | handle: services 77 | hasTitleField: true 78 | name: Services 79 | section: f6b0cb16-5df8-4b57-9856-c9c2d6b9699e # Services 80 | sortOrder: 0 81 | titleFormat: null 82 | titleTranslationKeyFormat: null 83 | titleTranslationMethod: site 84 | -------------------------------------------------------------------------------- /config/project/entryTypes/servicesIndex--7f0d6d70-ed28-45f1-88c0-4463e96f110f.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | 423d0eb9-9236-47c9-a98a-30fc46947c71: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: 9bb293f8-c659-4035-b5d3-e30dbf8d1c5b # Heading 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 08f8ec90-f7ad-4d40-9880-3c96304f1e4e # Body 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | name: Content 48 | sortOrder: 1 49 | handle: servicesIndex 50 | hasTitleField: true 51 | name: 'Services Index' 52 | section: 5fa323b7-9755-4174-bed2-0f2b11c05701 # Services Index 53 | sortOrder: 0 54 | titleFormat: null 55 | titleTranslationKeyFormat: null 56 | titleTranslationMethod: site 57 | -------------------------------------------------------------------------------- /config/project/entryTypes/work--01416786-fb23-483e-9b86-d70279bf18a9.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | b3e92e12-b415-4a53-b67e-ade9f5fdf5dc: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: aef80333-1412-4130-bb84-ac3bdbbcbbe2 # Short Description 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 9bb293f8-c659-4035-b5d3-e30dbf8d1c5b # Heading 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | - 48 | fieldUid: 674e53a6-d62c-4322-ae09-349765f1ef17 # Subheading 49 | instructions: null 50 | label: null 51 | required: '0' 52 | tip: null 53 | type: craft\fieldlayoutelements\CustomField 54 | warning: null 55 | width: 100 56 | - 57 | fieldUid: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 58 | instructions: null 59 | label: null 60 | required: '0' 61 | tip: null 62 | type: craft\fieldlayoutelements\CustomField 63 | warning: null 64 | width: 100 65 | - 66 | fieldUid: a988d6b4-6983-48e6-b08e-8fd72e31e483 # Services Performed 67 | instructions: null 68 | label: null 69 | required: '0' 70 | tip: null 71 | type: craft\fieldlayoutelements\CustomField 72 | warning: null 73 | width: 100 74 | name: Content 75 | sortOrder: 1 76 | - 77 | elements: 78 | - 79 | fieldUid: 0cbb9736-a84b-4e83-803c-5077f56394a9 # Featured Image 80 | instructions: null 81 | label: null 82 | required: '0' 83 | tip: null 84 | type: craft\fieldlayoutelements\CustomField 85 | warning: null 86 | width: 100 87 | - 88 | fieldUid: 0305c984-3934-4c7a-9de9-b0162c5b0112 # Featured Thumb 89 | instructions: null 90 | label: null 91 | required: '0' 92 | tip: null 93 | type: craft\fieldlayoutelements\CustomField 94 | warning: null 95 | width: 100 96 | - 97 | fieldUid: cdcff4b0-ece0-4d03-8d9f-6ab5939c1bea # Background Color 98 | instructions: null 99 | label: null 100 | required: '0' 101 | tip: null 102 | type: craft\fieldlayoutelements\CustomField 103 | warning: null 104 | width: 100 105 | name: Design 106 | sortOrder: 2 107 | handle: work 108 | hasTitleField: true 109 | name: Work 110 | section: b3a9eef3-9444-4995-84e2-6dc6b60aebd2 # Work 111 | sortOrder: 0 112 | titleFormat: null 113 | titleTranslationKeyFormat: null 114 | titleTranslationMethod: site 115 | -------------------------------------------------------------------------------- /config/project/entryTypes/workIndex--261c3cde-2d6c-4b23-b6cd-6def95992cf8.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | e3a26917-97ba-4590-a8f3-bb08b01991f3: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\EntryTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: 9bb293f8-c659-4035-b5d3-e30dbf8d1c5b # Heading 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | - 39 | fieldUid: 08f8ec90-f7ad-4d40-9880-3c96304f1e4e # Body 40 | instructions: null 41 | label: null 42 | required: '0' 43 | tip: null 44 | type: craft\fieldlayoutelements\CustomField 45 | warning: null 46 | width: 100 47 | name: Content 48 | sortOrder: 1 49 | handle: workIndex 50 | hasTitleField: true 51 | name: 'Work Index' 52 | section: 1ff1d4d0-499c-41b9-b071-77031c901052 # Work Index 53 | sortOrder: 0 54 | titleFormat: null 55 | titleTranslationKeyFormat: null 56 | titleTranslationMethod: site 57 | -------------------------------------------------------------------------------- /config/project/fieldGroups/0815347a-8e73-45fd-93c9-2244ac562559.yaml: -------------------------------------------------------------------------------- 1 | name: 'Contact Info' 2 | -------------------------------------------------------------------------------- /config/project/fieldGroups/0d0b7e16-8d7c-4d6f-9059-d11c473058f4.yaml: -------------------------------------------------------------------------------- 1 | name: General 2 | -------------------------------------------------------------------------------- /config/project/fieldGroups/8b4aae04-76ef-48c2-a294-e81064a470ed.yaml: -------------------------------------------------------------------------------- 1 | name: Services 2 | -------------------------------------------------------------------------------- /config/project/fieldGroups/d58a1faa-0bf6-46b2-b880-b0c14bebca75.yaml: -------------------------------------------------------------------------------- 1 | name: Homepage 2 | -------------------------------------------------------------------------------- /config/project/fieldGroups/f00e1793-0757-46e5-99e9-016b21359ac7.yaml: -------------------------------------------------------------------------------- 1 | name: Work 2 | -------------------------------------------------------------------------------- /config/project/fieldGroups/f7189ca2-4b93-4661-830a-a71aff8aa3cd.yaml: -------------------------------------------------------------------------------- 1 | name: Footer 2 | -------------------------------------------------------------------------------- /config/project/fields/address--422c7da9-d3e4-4d0a-8225-bbbc8264f029.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: text 2 | fieldGroup: 0815347a-8e73-45fd-93c9-2244ac562559 # Contact Info 3 | handle: address 4 | instructions: '' 5 | name: Address 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: null 10 | code: '' 11 | columnType: text 12 | initialRows: '4' 13 | multiline: '1' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/articleBody--82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: articleBody 4 | instructions: '' 5 | name: 'Article Body' 6 | searchable: true 7 | settings: 8 | contentTable: '{{%matrixcontent_articlebody}}' 9 | maxBlocks: '' 10 | minBlocks: '' 11 | propagationMethod: all 12 | translationKeyFormat: null 13 | translationMethod: site 14 | type: craft\fields\Matrix 15 | -------------------------------------------------------------------------------- /config/project/fields/backgroundColor--cdcff4b0-ece0-4d03-8d9f-6ab5939c1bea.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(7) 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: backgroundColor 4 | instructions: 'Hex value for alternate background color.' 5 | name: 'Background Color' 6 | searchable: true 7 | settings: 8 | defaultColor: '' 9 | translationKeyFormat: null 10 | translationMethod: none 11 | type: craft\fields\Color 12 | -------------------------------------------------------------------------------- /config/project/fields/body--08f8ec90-f7ad-4d40-9880-3c96304f1e4e.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: text 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: body 4 | instructions: '' 5 | name: Body 6 | searchable: true 7 | settings: 8 | availableTransforms: '*' 9 | availableVolumes: '*' 10 | cleanupHtml: true 11 | columnType: text 12 | configSelectionMode: choose 13 | defaultTransform: '' 14 | manualConfig: '' 15 | purifierConfig: '' 16 | purifyHtml: '1' 17 | redactorConfig: Standard.json 18 | removeEmptyTags: '1' 19 | removeInlineStyles: '1' 20 | removeNbsp: '1' 21 | showHtmlButtonForNonAdmins: false 22 | showUnpermittedFiles: false 23 | showUnpermittedVolumes: true 24 | uiMode: enlarged 25 | translationKeyFormat: null 26 | translationMethod: none 27 | type: craft\redactor\Field 28 | -------------------------------------------------------------------------------- /config/project/fields/clientLogos--950b3c0e-9780-4487-a881-23d96d6075d5.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: d58a1faa-0bf6-46b2-b880-b0c14bebca75 # Homepage 3 | handle: clientLogos 4 | instructions: '' 5 | name: 'Client Logos' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | allowUploads: true 10 | allowedKinds: null 11 | defaultUploadLocationSource: 'volume:7d6a9bef-727c-4a0c-9791-4f423956de69' # Company Logos 12 | defaultUploadLocationSubpath: '' 13 | limit: '' 14 | localizeRelations: false 15 | previewMode: full 16 | restrictFiles: '' 17 | selectionLabel: '' 18 | showSiteMenu: true 19 | showUnpermittedFiles: false 20 | showUnpermittedVolumes: true 21 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 22 | singleUploadLocationSubpath: '' 23 | source: null 24 | sources: 25 | - 'volume:7d6a9bef-727c-4a0c-9791-4f423956de69' # Company Logos 26 | targetSiteId: null 27 | useSingleFolder: false 28 | validateRelatedElements: false 29 | viewMode: list 30 | translationKeyFormat: null 31 | translationMethod: site 32 | type: craft\fields\Assets 33 | -------------------------------------------------------------------------------- /config/project/fields/contactMethods--b01498fe-6db2-4b1d-84d2-8cd0cb62f449.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 0815347a-8e73-45fd-93c9-2244ac562559 # Contact Info 3 | handle: contactMethods 4 | instructions: '' 5 | name: 'Contact Methods' 6 | searchable: true 7 | settings: 8 | contentTable: '{{%matrixcontent_contactmethods}}' 9 | maxBlocks: '' 10 | minBlocks: '' 11 | propagationMethod: all 12 | translationKeyFormat: null 13 | translationMethod: site 14 | type: craft\fields\Matrix 15 | -------------------------------------------------------------------------------- /config/project/fields/contactUsLabel--fcf41a5f-68b5-42dd-8ca1-cc457eb749f0.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: f7189ca2-4b93-4661-830a-a71aff8aa3cd # Footer 3 | handle: contactUsLabel 4 | instructions: '' 5 | name: 'Contact Us Label' 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/copyrightNotice--5095500e-4962-429c-9b9c-7a4d0d4f930c.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: f7189ca2-4b93-4661-830a-a71aff8aa3cd # Footer 3 | handle: copyrightNotice 4 | instructions: '' 5 | name: 'Copyright Notice' 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/email--b75266c9-d8d2-42ae-9024-0fecb8bdc994.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: 0815347a-8e73-45fd-93c9-2244ac562559 # Contact Info 3 | handle: email 4 | instructions: '' 5 | name: Email 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/featuredEntry--a171d498-9024-4855-9a6c-b3b96765ab7c.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: boolean 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: featuredEntry 4 | instructions: 'Should this entry be featured on the listing page?' 5 | name: 'Featured?' 6 | searchable: true 7 | settings: 8 | default: false 9 | offLabel: null 10 | onLabel: null 11 | translationKeyFormat: null 12 | translationMethod: none 13 | type: craft\fields\Lightswitch 14 | -------------------------------------------------------------------------------- /config/project/fields/featuredImage--0cbb9736-a84b-4e83-803c-5077f56394a9.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: featuredImage 4 | instructions: '' 5 | name: 'Featured Image' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | allowUploads: true 10 | allowedKinds: 11 | - image 12 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 13 | defaultUploadLocationSubpath: '' 14 | limit: '2' 15 | localizeRelations: false 16 | previewMode: full 17 | restrictFiles: '1' 18 | selectionLabel: '' 19 | showSiteMenu: true 20 | showUnpermittedFiles: false 21 | showUnpermittedVolumes: true 22 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 23 | singleUploadLocationSubpath: '' 24 | source: null 25 | sources: 26 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 27 | targetSiteId: null 28 | useSingleFolder: false 29 | validateRelatedElements: false 30 | viewMode: list 31 | translationKeyFormat: null 32 | translationMethod: site 33 | type: craft\fields\Assets 34 | -------------------------------------------------------------------------------- /config/project/fields/featuredThumb--0305c984-3934-4c7a-9de9-b0162c5b0112.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: featuredThumb 4 | instructions: 'Thumb image for use on home page or archives.' 5 | name: 'Featured Thumb' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | allowUploads: true 10 | allowedKinds: null 11 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 12 | defaultUploadLocationSubpath: '' 13 | limit: '1' 14 | localizeRelations: false 15 | previewMode: full 16 | restrictFiles: '' 17 | selectionLabel: '' 18 | showSiteMenu: true 19 | showUnpermittedFiles: false 20 | showUnpermittedVolumes: true 21 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 22 | singleUploadLocationSubpath: '' 23 | source: null 24 | sources: '*' 25 | targetSiteId: null 26 | useSingleFolder: false 27 | validateRelatedElements: false 28 | viewMode: list 29 | translationKeyFormat: null 30 | translationMethod: site 31 | type: craft\fields\Assets 32 | -------------------------------------------------------------------------------- /config/project/fields/heading--9bb293f8-c659-4035-b5d3-e30dbf8d1c5b.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: heading 4 | instructions: '' 5 | name: Heading 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/heroImage--a2129d62-1d81-4c2f-a92d-81c03ed120dc.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: d58a1faa-0bf6-46b2-b880-b0c14bebca75 # Homepage 3 | handle: heroImage 4 | instructions: 'Choose the big homepage hero image. The image should be at least 1450×916 for best results.' 5 | name: 'Hero Image' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | allowUploads: true 10 | allowedKinds: null 11 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 12 | defaultUploadLocationSubpath: '' 13 | limit: '1' 14 | localizeRelations: false 15 | previewMode: full 16 | restrictFiles: '' 17 | selectionLabel: '' 18 | showSiteMenu: true 19 | showUnpermittedFiles: false 20 | showUnpermittedVolumes: true 21 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 22 | singleUploadLocationSubpath: '' 23 | source: null 24 | sources: 25 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 26 | targetSiteId: null 27 | useSingleFolder: false 28 | validateRelatedElements: false 29 | viewMode: list 30 | translationKeyFormat: null 31 | translationMethod: site 32 | type: craft\fields\Assets 33 | -------------------------------------------------------------------------------- /config/project/fields/indexHeading--67ff16f0-04e2-492b-b999-a7d364331d80.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: text 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: indexHeading 4 | instructions: 'Page heading for services structure index page.' 5 | name: 'Index Heading' 6 | searchable: true 7 | settings: 8 | availableTransforms: '*' 9 | availableVolumes: '*' 10 | cleanupHtml: true 11 | columnType: text 12 | configSelectionMode: choose 13 | defaultTransform: '' 14 | manualConfig: '' 15 | purifierConfig: '' 16 | purifyHtml: '1' 17 | redactorConfig: '' 18 | removeEmptyTags: '' 19 | removeInlineStyles: '' 20 | removeNbsp: '' 21 | showHtmlButtonForNonAdmins: false 22 | showUnpermittedFiles: false 23 | showUnpermittedVolumes: true 24 | uiMode: enlarged 25 | translationKeyFormat: null 26 | translationMethod: none 27 | type: craft\redactor\Field 28 | -------------------------------------------------------------------------------- /config/project/fields/linkUrl--4ca9d3b8-ff02-403a-9010-45763fcdea9f.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: linkUrl 4 | instructions: '' 5 | name: 'Link URL' 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: 'e.g. http://example.com' 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/serviceBody--9bf9e642-2881-44b4-99ff-2cbed3ccc2d7.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 8b4aae04-76ef-48c2-a294-e81064a470ed # Services 3 | handle: serviceBody 4 | instructions: '' 5 | name: 'Service Body' 6 | searchable: true 7 | settings: 8 | contentTable: '{{%matrixcontent_servicebody}}' 9 | maxBlocks: '' 10 | minBlocks: '' 11 | propagationMethod: all 12 | translationKeyFormat: null 13 | translationMethod: site 14 | type: craft\fields\Matrix 15 | -------------------------------------------------------------------------------- /config/project/fields/serviceIcon--d96355a7-1353-4097-bf08-3bd5c44821f8.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: 8b4aae04-76ef-48c2-a294-e81064a470ed # Services 3 | handle: serviceIcon 4 | instructions: '' 5 | name: 'Service Icon' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | allowUploads: true 10 | allowedKinds: null 11 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 12 | defaultUploadLocationSubpath: '' 13 | limit: '1' 14 | localizeRelations: false 15 | previewMode: full 16 | restrictFiles: '' 17 | selectionLabel: '' 18 | showSiteMenu: true 19 | showUnpermittedFiles: false 20 | showUnpermittedVolumes: true 21 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 22 | singleUploadLocationSubpath: '' 23 | source: null 24 | sources: 25 | - 'volume:3fc34ff2-8da7-4a35-8147-f0a2e01392b9' # Service Icons 26 | targetSiteId: null 27 | useSingleFolder: false 28 | validateRelatedElements: false 29 | viewMode: list 30 | translationKeyFormat: null 31 | translationMethod: site 32 | type: craft\fields\Assets 33 | -------------------------------------------------------------------------------- /config/project/fields/servicesPerformed--a988d6b4-6983-48e6-b08e-8fd72e31e483.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: f00e1793-0757-46e5-99e9-016b21359ac7 # Work 3 | handle: servicesPerformed 4 | instructions: '' 5 | name: 'Services Performed' 6 | searchable: true 7 | settings: 8 | allowSelfRelations: false 9 | limit: '' 10 | localizeRelations: false 11 | selectionLabel: '' 12 | showSiteMenu: true 13 | source: null 14 | sources: 15 | - 'section:f6b0cb16-5df8-4b57-9856-c9c2d6b9699e' # Services 16 | targetSiteId: null 17 | validateRelatedElements: false 18 | viewMode: null 19 | translationKeyFormat: null 20 | translationMethod: site 21 | type: craft\fields\Entries 22 | -------------------------------------------------------------------------------- /config/project/fields/shortDescription--aef80333-1412-4130-bb84-ac3bdbbcbbe2.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: text 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: shortDescription 4 | instructions: 'Short description for use in index regions.' 5 | name: 'Short Description' 6 | searchable: true 7 | settings: 8 | availableTransforms: '*' 9 | availableVolumes: '*' 10 | cleanupHtml: true 11 | columnType: text 12 | configSelectionMode: choose 13 | defaultTransform: '' 14 | manualConfig: '' 15 | purifierConfig: '' 16 | purifyHtml: '1' 17 | redactorConfig: Simple.json 18 | removeEmptyTags: '1' 19 | removeInlineStyles: '1' 20 | removeNbsp: '1' 21 | showHtmlButtonForNonAdmins: false 22 | showUnpermittedFiles: false 23 | showUnpermittedVolumes: true 24 | uiMode: enlarged 25 | translationKeyFormat: null 26 | translationMethod: none 27 | type: craft\redactor\Field 28 | -------------------------------------------------------------------------------- /config/project/fields/subheading--674e53a6-d62c-4322-ae09-349765f1ef17.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string(1020) 2 | fieldGroup: 0d0b7e16-8d7c-4d6f-9059-d11c473058f4 # General 3 | handle: subheading 4 | instructions: '' 5 | name: Subheading 6 | searchable: true 7 | settings: 8 | byteLimit: null 9 | charLimit: 255 10 | code: '' 11 | columnType: null 12 | initialRows: '4' 13 | multiline: '' 14 | placeholder: null 15 | uiMode: normal 16 | translationKeyFormat: null 17 | translationMethod: none 18 | type: craft\fields\PlainText 19 | -------------------------------------------------------------------------------- /config/project/fields/testimonials--8823155c-e84a-4a38-af30-2cb88b705e7b.yaml: -------------------------------------------------------------------------------- 1 | contentColumnType: string 2 | fieldGroup: d58a1faa-0bf6-46b2-b880-b0c14bebca75 # Homepage 3 | handle: testimonials 4 | instructions: '' 5 | name: Testimonials 6 | searchable: true 7 | settings: 8 | contentTable: '{{%matrixcontent_testimonials}}' 9 | maxBlocks: '3' 10 | minBlocks: '' 11 | propagationMethod: all 12 | translationKeyFormat: null 13 | translationMethod: site 14 | type: craft\fields\Matrix 15 | -------------------------------------------------------------------------------- /config/project/globalSets/footer--8dbeba09-2202-4eb4-8f3c-b15633a4830d.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | ba0a8885-3474-4231-9827-b6a6da467937: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | fieldUid: 5095500e-4962-429c-9b9c-7a4d0d4f930c # Copyright Notice 8 | instructions: null 9 | label: null 10 | required: '0' 11 | tip: null 12 | type: craft\fieldlayoutelements\CustomField 13 | warning: null 14 | width: 100 15 | - 16 | fieldUid: fcf41a5f-68b5-42dd-8ca1-cc457eb749f0 # Contact Us Label 17 | instructions: null 18 | label: null 19 | required: '0' 20 | tip: null 21 | type: craft\fieldlayoutelements\CustomField 22 | warning: null 23 | width: 100 24 | - 25 | fieldUid: b75266c9-d8d2-42ae-9024-0fecb8bdc994 # Email 26 | instructions: null 27 | label: null 28 | required: '0' 29 | tip: null 30 | type: craft\fieldlayoutelements\CustomField 31 | warning: null 32 | width: 100 33 | name: Content 34 | sortOrder: 1 35 | handle: footer 36 | name: 'Footer Content' 37 | -------------------------------------------------------------------------------- /config/project/graphql/graphql.yaml: -------------------------------------------------------------------------------- 1 | publicToken: 2 | enabled: false 3 | expiryDate: null 4 | -------------------------------------------------------------------------------- /config/project/graphql/schemas/992fb441-6b13-4051-aacd-e39943354507.yaml: -------------------------------------------------------------------------------- 1 | isPublic: true 2 | name: 'Public Schema' 3 | -------------------------------------------------------------------------------- /config/project/imageTransforms/medium--36f99c8f-0ba4-4e4c-af7d-a07dee715ac1.yaml: -------------------------------------------------------------------------------- 1 | format: null 2 | handle: medium 3 | height: 424 4 | interlace: none 5 | mode: crop 6 | name: Medium 7 | position: center-center 8 | quality: null 9 | width: 700 10 | -------------------------------------------------------------------------------- /config/project/imageTransforms/small--726664b6-90aa-4fa9-9d03-23be4ba628bc.yaml: -------------------------------------------------------------------------------- 1 | format: null 2 | handle: small 3 | height: 339 4 | interlace: none 5 | mode: crop 6 | name: Small 7 | position: center-center 8 | quality: null 9 | width: 400 10 | -------------------------------------------------------------------------------- /config/project/imageTransforms/thumb--0f910d7c-0ba2-476a-a7c9-fa489255e601.yaml: -------------------------------------------------------------------------------- 1 | format: null 2 | handle: thumb 3 | height: 204 4 | interlace: none 5 | mode: crop 6 | name: Thumb 7 | position: center-center 8 | quality: null 9 | width: 280 10 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/contactMethod--ecd6fdce-8d11-4aa6-a167-e731757515c6.yaml: -------------------------------------------------------------------------------- 1 | field: b01498fe-6db2-4b1d-84d2-8cd0cb62f449 # Contact Methods 2 | fieldLayouts: 3 | 3c4c697e-cb6b-4704-bee5-9a2bae9da8f7: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: aad31ad0-0405-41b5-aff0-4ec567b557a0 # Label 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: 0275193a-3c51-46a3-afd0-49e55a93bfd3 # Value 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | name: Content 26 | sortOrder: 1 27 | fields: 28 | 0275193a-3c51-46a3-afd0-49e55a93bfd3: # Value 29 | contentColumnType: string(1020) 30 | fieldGroup: null 31 | handle: methodValue 32 | instructions: '' 33 | name: Value 34 | searchable: true 35 | settings: 36 | byteLimit: null 37 | charLimit: 255 38 | code: '' 39 | columnType: null 40 | initialRows: '4' 41 | multiline: '' 42 | placeholder: null 43 | uiMode: normal 44 | translationKeyFormat: null 45 | translationMethod: none 46 | type: craft\fields\PlainText 47 | aad31ad0-0405-41b5-aff0-4ec567b557a0: # Label 48 | contentColumnType: string(1020) 49 | fieldGroup: null 50 | handle: label 51 | instructions: '' 52 | name: Label 53 | searchable: true 54 | settings: 55 | byteLimit: null 56 | charLimit: 255 57 | code: '' 58 | columnType: null 59 | initialRows: '4' 60 | multiline: '' 61 | placeholder: null 62 | uiMode: normal 63 | translationKeyFormat: null 64 | translationMethod: none 65 | type: craft\fields\PlainText 66 | handle: contactMethod 67 | name: 'Contact Method' 68 | sortOrder: 1 69 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/gallery--0f3ede99-8b78-4042-85c9-422f57f5b01b.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 0964c39a-7c91-4ac2-a9e6-584a7c845d32: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: ba8a1276-24c8-43eb-94d4-b2a19c0c1bf7 # Images 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | name: Content 17 | sortOrder: 1 18 | fields: 19 | ba8a1276-24c8-43eb-94d4-b2a19c0c1bf7: # Images 20 | contentColumnType: string 21 | fieldGroup: null 22 | handle: images 23 | instructions: '' 24 | name: Images 25 | searchable: true 26 | settings: 27 | allowSelfRelations: false 28 | allowUploads: true 29 | allowedKinds: null 30 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 31 | defaultUploadLocationSubpath: '' 32 | limit: '3' 33 | localizeRelations: false 34 | previewMode: full 35 | restrictFiles: '' 36 | selectionLabel: '' 37 | showSiteMenu: true 38 | showUnpermittedFiles: false 39 | showUnpermittedVolumes: true 40 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 41 | singleUploadLocationSubpath: '' 42 | source: null 43 | sources: 44 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 45 | targetSiteId: null 46 | useSingleFolder: false 47 | validateRelatedElements: false 48 | viewMode: list 49 | translationKeyFormat: null 50 | translationMethod: site 51 | type: craft\fields\Assets 52 | handle: gallery 53 | name: Gallery 54 | sortOrder: 6 55 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/heading--1d5e20da-bc96-4a33-b045-8d1fa5870e74.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 0189a187-131f-46a8-b494-cd94c82d6aae: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 631f668a-3658-48a4-89fd-8da5af0a60cc # Heading 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | name: Content 17 | sortOrder: 1 18 | fields: 19 | 631f668a-3658-48a4-89fd-8da5af0a60cc: # Heading 20 | contentColumnType: string(1020) 21 | fieldGroup: null 22 | handle: heading 23 | instructions: '' 24 | name: Heading 25 | searchable: true 26 | settings: 27 | byteLimit: null 28 | charLimit: 255 29 | code: '' 30 | columnType: null 31 | initialRows: '4' 32 | multiline: '' 33 | placeholder: null 34 | uiMode: normal 35 | translationKeyFormat: null 36 | translationMethod: none 37 | type: craft\fields\PlainText 38 | handle: heading 39 | name: Heading 40 | sortOrder: 2 41 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/image--9123201b-837c-4269-9d7c-d5e11bba1e2b.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 327aba6f-b81c-4179-9e58-208d34322ced: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 964a1aba-15ac-413f-86c1-03fbf37f30c7 # Image 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: 7ca32393-f78c-4de0-9f8f-52b64e09584f # Caption 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | - 26 | fieldUid: f87a6243-5b7f-4456-9106-ccfb6e03b754 # Position 27 | instructions: null 28 | label: null 29 | required: false 30 | tip: null 31 | type: craft\fieldlayoutelements\CustomField 32 | warning: null 33 | width: 100 34 | name: Content 35 | sortOrder: 1 36 | fields: 37 | 7ca32393-f78c-4de0-9f8f-52b64e09584f: # Caption 38 | contentColumnType: text 39 | fieldGroup: null 40 | handle: caption 41 | instructions: '' 42 | name: Caption 43 | searchable: true 44 | settings: 45 | availableTransforms: '*' 46 | availableVolumes: '*' 47 | cleanupHtml: true 48 | columnType: text 49 | configSelectionMode: choose 50 | defaultTransform: '' 51 | manualConfig: '' 52 | purifierConfig: '' 53 | purifyHtml: '1' 54 | redactorConfig: Simple.json 55 | removeEmptyTags: '1' 56 | removeInlineStyles: '1' 57 | removeNbsp: '1' 58 | showHtmlButtonForNonAdmins: false 59 | showUnpermittedFiles: false 60 | showUnpermittedVolumes: true 61 | uiMode: enlarged 62 | translationKeyFormat: null 63 | translationMethod: none 64 | type: craft\redactor\Field 65 | 964a1aba-15ac-413f-86c1-03fbf37f30c7: # Image 66 | contentColumnType: string 67 | fieldGroup: null 68 | handle: image 69 | instructions: '' 70 | name: Image 71 | searchable: true 72 | settings: 73 | allowSelfRelations: false 74 | allowUploads: true 75 | allowedKinds: 76 | - image 77 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 78 | defaultUploadLocationSubpath: '' 79 | limit: '1' 80 | localizeRelations: false 81 | previewMode: full 82 | restrictFiles: '1' 83 | selectionLabel: '' 84 | showSiteMenu: true 85 | showUnpermittedFiles: false 86 | showUnpermittedVolumes: true 87 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 88 | singleUploadLocationSubpath: '' 89 | source: null 90 | sources: 91 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 92 | targetSiteId: null 93 | useSingleFolder: false 94 | validateRelatedElements: false 95 | viewMode: list 96 | translationKeyFormat: null 97 | translationMethod: site 98 | type: craft\fields\Assets 99 | f87a6243-5b7f-4456-9106-ccfb6e03b754: # Position 100 | contentColumnType: string 101 | fieldGroup: null 102 | handle: position 103 | instructions: '' 104 | name: Position 105 | searchable: true 106 | settings: 107 | optgroups: true 108 | options: 109 | - 110 | __assoc__: 111 | - 112 | - label 113 | - Left 114 | - 115 | - value 116 | - left 117 | - 118 | - default 119 | - '' 120 | - 121 | __assoc__: 122 | - 123 | - label 124 | - Center 125 | - 126 | - value 127 | - center 128 | - 129 | - default 130 | - '' 131 | - 132 | __assoc__: 133 | - 134 | - label 135 | - Right 136 | - 137 | - value 138 | - right 139 | - 140 | - default 141 | - '' 142 | - 143 | __assoc__: 144 | - 145 | - label 146 | - Full 147 | - 148 | - value 149 | - full 150 | - 151 | - default 152 | - '' 153 | translationKeyFormat: null 154 | translationMethod: none 155 | type: craft\fields\Dropdown 156 | handle: image 157 | name: Image 158 | sortOrder: 5 159 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/newSection--e1c6c95e-a19b-4cd8-9a83-935e91f862c0.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 8d01ea64-38fa-43f7-be8a-43e4e460bfbd: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 8cd6b011-5271-484d-85d9-6a6b731137e9 # Section Heading 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | name: Content 17 | sortOrder: 1 18 | fields: 19 | 8cd6b011-5271-484d-85d9-6a6b731137e9: # Section Heading 20 | contentColumnType: string(1020) 21 | fieldGroup: null 22 | handle: sectionHeading 23 | instructions: '' 24 | name: 'Section Heading' 25 | searchable: true 26 | settings: 27 | byteLimit: null 28 | charLimit: 255 29 | code: '' 30 | columnType: null 31 | initialRows: '4' 32 | multiline: '' 33 | placeholder: null 34 | uiMode: normal 35 | translationKeyFormat: null 36 | translationMethod: none 37 | type: craft\fields\PlainText 38 | handle: newSection 39 | name: 'New Section' 40 | sortOrder: 1 41 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/pullQuote--daa4f1b9-ebde-4b0e-9cf3-027bf3b8b890.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 83f7b1de-657b-45bb-94e4-57d10973c78c: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: a8a6d843-bec1-4882-98ec-30cb74f5b16f # Pull Quote 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: a88d73a8-c75f-4c72-aa70-a39dfbbff0fe # Position 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | name: Content 26 | sortOrder: 1 27 | fields: 28 | a8a6d843-bec1-4882-98ec-30cb74f5b16f: # Pull Quote 29 | contentColumnType: text 30 | fieldGroup: null 31 | handle: pullQuote 32 | instructions: '' 33 | name: 'Pull Quote' 34 | searchable: true 35 | settings: 36 | byteLimit: null 37 | charLimit: null 38 | code: '' 39 | columnType: text 40 | initialRows: '4' 41 | multiline: '' 42 | placeholder: null 43 | uiMode: normal 44 | translationKeyFormat: null 45 | translationMethod: none 46 | type: craft\fields\PlainText 47 | a88d73a8-c75f-4c72-aa70-a39dfbbff0fe: # Position 48 | contentColumnType: string 49 | fieldGroup: null 50 | handle: position 51 | instructions: '' 52 | name: Position 53 | searchable: true 54 | settings: 55 | optgroups: true 56 | options: 57 | - 58 | __assoc__: 59 | - 60 | - label 61 | - Left 62 | - 63 | - value 64 | - left 65 | - 66 | - default 67 | - '' 68 | - 69 | __assoc__: 70 | - 71 | - label 72 | - Center 73 | - 74 | - value 75 | - center 76 | - 77 | - default 78 | - '' 79 | - 80 | __assoc__: 81 | - 82 | - label 83 | - Right 84 | - 85 | - value 86 | - right 87 | - 88 | - default 89 | - '' 90 | translationKeyFormat: null 91 | translationMethod: none 92 | type: craft\fields\Dropdown 93 | handle: pullQuote 94 | name: 'Pull Quote' 95 | sortOrder: 4 96 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/quote--97ff3c80-2398-4ca5-9d03-c3b8727c6eb2.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | b82a12f2-e814-4b74-9b32-bd1a90497a65: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 35200549-df46-4092-994a-a8015c5810ba # Quote 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: 41e6fac7-12d7-45c9-ac83-0aa59793d872 # Attribution 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | - 26 | fieldUid: a5b4b046-1178-45f9-b4cf-3e3bef86e067 # Position 27 | instructions: null 28 | label: null 29 | required: false 30 | tip: null 31 | type: craft\fieldlayoutelements\CustomField 32 | warning: null 33 | width: 100 34 | name: Content 35 | sortOrder: 1 36 | fields: 37 | 41e6fac7-12d7-45c9-ac83-0aa59793d872: # Attribution 38 | contentColumnType: text 39 | fieldGroup: null 40 | handle: attribution 41 | instructions: '' 42 | name: Attribution 43 | searchable: true 44 | settings: 45 | byteLimit: null 46 | charLimit: null 47 | code: '' 48 | columnType: text 49 | initialRows: '4' 50 | multiline: '' 51 | placeholder: null 52 | uiMode: normal 53 | translationKeyFormat: null 54 | translationMethod: none 55 | type: craft\fields\PlainText 56 | 35200549-df46-4092-994a-a8015c5810ba: # Quote 57 | contentColumnType: text 58 | fieldGroup: null 59 | handle: quote 60 | instructions: '' 61 | name: Quote 62 | searchable: true 63 | settings: 64 | byteLimit: null 65 | charLimit: null 66 | code: '' 67 | columnType: text 68 | initialRows: '4' 69 | multiline: '' 70 | placeholder: null 71 | uiMode: normal 72 | translationKeyFormat: null 73 | translationMethod: none 74 | type: craft\fields\PlainText 75 | a5b4b046-1178-45f9-b4cf-3e3bef86e067: # Position 76 | contentColumnType: string 77 | fieldGroup: null 78 | handle: position 79 | instructions: '' 80 | name: Position 81 | searchable: true 82 | settings: 83 | optgroups: true 84 | options: 85 | - 86 | __assoc__: 87 | - 88 | - label 89 | - Center 90 | - 91 | - value 92 | - center 93 | - 94 | - default 95 | - '' 96 | - 97 | __assoc__: 98 | - 99 | - label 100 | - Full 101 | - 102 | - value 103 | - full 104 | - 105 | - default 106 | - '' 107 | translationKeyFormat: null 108 | translationMethod: none 109 | type: craft\fields\Dropdown 110 | handle: quote 111 | name: Quote 112 | sortOrder: 7 113 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/servicesPoint--aa39e3a4-2d2c-4ed2-a9b5-74122ece5947.yaml: -------------------------------------------------------------------------------- 1 | field: 9bf9e642-2881-44b4-99ff-2cbed3ccc2d7 # Service Body 2 | fieldLayouts: 3 | 65bf26e9-50b3-4580-88a4-7a622077d8fb: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 3285a611-4363-43f2-82b5-97e2d253cab3 # Heading 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: c9ccf068-4ace-4b21-9356-68f3faa96cf3 # Text 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | - 26 | fieldUid: 9ce53ce9-939b-4760-97f4-545ef2c388eb # Image 27 | instructions: null 28 | label: null 29 | required: false 30 | tip: null 31 | type: craft\fieldlayoutelements\CustomField 32 | warning: null 33 | width: 100 34 | name: Content 35 | sortOrder: 1 36 | fields: 37 | 9ce53ce9-939b-4760-97f4-545ef2c388eb: # Image 38 | contentColumnType: string 39 | fieldGroup: null 40 | handle: image 41 | instructions: '' 42 | name: Image 43 | searchable: true 44 | settings: 45 | allowSelfRelations: false 46 | allowUploads: true 47 | allowedKinds: null 48 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 49 | defaultUploadLocationSubpath: '' 50 | limit: '1' 51 | localizeRelations: false 52 | previewMode: full 53 | restrictFiles: '' 54 | selectionLabel: '' 55 | showSiteMenu: true 56 | showUnpermittedFiles: false 57 | showUnpermittedVolumes: true 58 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 59 | singleUploadLocationSubpath: '' 60 | source: null 61 | sources: 62 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 63 | targetSiteId: null 64 | useSingleFolder: false 65 | validateRelatedElements: false 66 | viewMode: list 67 | translationKeyFormat: null 68 | translationMethod: site 69 | type: craft\fields\Assets 70 | 3285a611-4363-43f2-82b5-97e2d253cab3: # Heading 71 | contentColumnType: text 72 | fieldGroup: null 73 | handle: heading 74 | instructions: '' 75 | name: Heading 76 | searchable: true 77 | settings: 78 | byteLimit: null 79 | charLimit: null 80 | code: '' 81 | columnType: text 82 | initialRows: '4' 83 | multiline: '' 84 | placeholder: null 85 | uiMode: normal 86 | translationKeyFormat: null 87 | translationMethod: none 88 | type: craft\fields\PlainText 89 | c9ccf068-4ace-4b21-9356-68f3faa96cf3: # Text 90 | contentColumnType: text 91 | fieldGroup: null 92 | handle: text 93 | instructions: '' 94 | name: Text 95 | searchable: true 96 | settings: 97 | availableTransforms: '*' 98 | availableVolumes: '*' 99 | cleanupHtml: true 100 | columnType: text 101 | configSelectionMode: choose 102 | defaultTransform: '' 103 | manualConfig: '' 104 | purifierConfig: '' 105 | purifyHtml: '1' 106 | redactorConfig: '' 107 | removeEmptyTags: '1' 108 | removeInlineStyles: '1' 109 | removeNbsp: '1' 110 | showHtmlButtonForNonAdmins: false 111 | showUnpermittedFiles: false 112 | showUnpermittedVolumes: true 113 | uiMode: enlarged 114 | translationKeyFormat: null 115 | translationMethod: none 116 | type: craft\redactor\Field 117 | handle: servicesPoint 118 | name: 'Service Point' 119 | sortOrder: 1 120 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/testimonial--b3d2e2ed-d430-48c9-b89f-a38a7f8ea8b3.yaml: -------------------------------------------------------------------------------- 1 | field: 8823155c-e84a-4a38-af30-2cb88b705e7b # Testimonials 2 | fieldLayouts: 3 | 569a9c10-0657-4dbf-87c9-005afb784b54: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: 39b59166-9d91-4d17-baf9-229aca6174c2 # Quote 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: 4ed4bf91-bcf9-45a9-84f7-d5d768103a09 # Cite 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | - 26 | fieldUid: a418bde2-f4cc-4ed2-a358-44362a0cb3a9 # Photo 27 | instructions: null 28 | label: null 29 | required: false 30 | tip: null 31 | type: craft\fieldlayoutelements\CustomField 32 | warning: null 33 | width: 100 34 | name: Content 35 | sortOrder: 1 36 | fields: 37 | 4ed4bf91-bcf9-45a9-84f7-d5d768103a09: # Cite 38 | contentColumnType: text 39 | fieldGroup: null 40 | handle: cite 41 | instructions: '' 42 | name: Cite 43 | searchable: true 44 | settings: 45 | byteLimit: null 46 | charLimit: null 47 | code: '' 48 | columnType: text 49 | initialRows: '4' 50 | multiline: '' 51 | placeholder: null 52 | uiMode: normal 53 | translationKeyFormat: null 54 | translationMethod: none 55 | type: craft\fields\PlainText 56 | 39b59166-9d91-4d17-baf9-229aca6174c2: # Quote 57 | contentColumnType: text 58 | fieldGroup: null 59 | handle: quote 60 | instructions: '' 61 | name: Quote 62 | searchable: true 63 | settings: 64 | byteLimit: null 65 | charLimit: null 66 | code: '' 67 | columnType: text 68 | initialRows: '4' 69 | multiline: '' 70 | placeholder: null 71 | uiMode: normal 72 | translationKeyFormat: null 73 | translationMethod: none 74 | type: craft\fields\PlainText 75 | a418bde2-f4cc-4ed2-a358-44362a0cb3a9: # Photo 76 | contentColumnType: string 77 | fieldGroup: null 78 | handle: photo 79 | instructions: '' 80 | name: Photo 81 | searchable: true 82 | settings: 83 | allowSelfRelations: false 84 | allowUploads: true 85 | allowedKinds: null 86 | defaultUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 87 | defaultUploadLocationSubpath: '' 88 | limit: '1' 89 | localizeRelations: false 90 | previewMode: full 91 | restrictFiles: '' 92 | selectionLabel: '' 93 | showSiteMenu: true 94 | showUnpermittedFiles: false 95 | showUnpermittedVolumes: true 96 | singleUploadLocationSource: 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 97 | singleUploadLocationSubpath: '' 98 | source: null 99 | sources: 100 | - 'volume:0193dc64-5499-4e28-95dd-f8f603154851' # Site Assets 101 | targetSiteId: null 102 | useSingleFolder: false 103 | validateRelatedElements: false 104 | viewMode: list 105 | translationKeyFormat: null 106 | translationMethod: site 107 | type: craft\fields\Assets 108 | handle: testimonial 109 | name: Testimonial 110 | sortOrder: 1 111 | -------------------------------------------------------------------------------- /config/project/matrixBlockTypes/text--070be8db-f9b0-4605-98ae-e9b54b1af3f6.yaml: -------------------------------------------------------------------------------- 1 | field: 82ac4aa6-3b63-4cb9-a1f6-6cb6a5210a2e # Article Body 2 | fieldLayouts: 3 | 4ade673e-0245-430b-b932-c8ea86e36773: 4 | tabs: 5 | - 6 | elements: 7 | - 8 | fieldUid: e03a8ea1-0b9b-4e8c-bbf5-f7197caad45c # Text 9 | instructions: null 10 | label: null 11 | required: false 12 | tip: null 13 | type: craft\fieldlayoutelements\CustomField 14 | warning: null 15 | width: 100 16 | - 17 | fieldUid: cc6a4697-6d1c-4342-b9de-bce13295a885 # Position 18 | instructions: null 19 | label: null 20 | required: false 21 | tip: null 22 | type: craft\fieldlayoutelements\CustomField 23 | warning: null 24 | width: 100 25 | name: Content 26 | sortOrder: 1 27 | fields: 28 | cc6a4697-6d1c-4342-b9de-bce13295a885: # Position 29 | contentColumnType: string 30 | fieldGroup: null 31 | handle: position 32 | instructions: '' 33 | name: Position 34 | searchable: true 35 | settings: 36 | optgroups: true 37 | options: 38 | - 39 | __assoc__: 40 | - 41 | - label 42 | - Left 43 | - 44 | - value 45 | - left 46 | - 47 | - default 48 | - '' 49 | - 50 | __assoc__: 51 | - 52 | - label 53 | - Center 54 | - 55 | - value 56 | - center 57 | - 58 | - default 59 | - '' 60 | - 61 | __assoc__: 62 | - 63 | - label 64 | - Right 65 | - 66 | - value 67 | - right 68 | - 69 | - default 70 | - '' 71 | translationKeyFormat: null 72 | translationMethod: none 73 | type: craft\fields\Dropdown 74 | e03a8ea1-0b9b-4e8c-bbf5-f7197caad45c: # Text 75 | contentColumnType: text 76 | fieldGroup: null 77 | handle: text 78 | instructions: '' 79 | name: Text 80 | searchable: true 81 | settings: 82 | availableTransforms: '*' 83 | availableVolumes: '*' 84 | cleanupHtml: true 85 | columnType: text 86 | configSelectionMode: choose 87 | defaultTransform: '' 88 | manualConfig: '' 89 | purifierConfig: '' 90 | purifyHtml: '1' 91 | redactorConfig: Standard.json 92 | removeEmptyTags: '1' 93 | removeInlineStyles: '1' 94 | removeNbsp: '1' 95 | showHtmlButtonForNonAdmins: false 96 | showUnpermittedFiles: false 97 | showUnpermittedVolumes: true 98 | uiMode: enlarged 99 | translationKeyFormat: null 100 | translationMethod: none 101 | type: craft\redactor\Field 102 | handle: text 103 | name: Text 104 | sortOrder: 3 105 | -------------------------------------------------------------------------------- /config/project/project.yaml: -------------------------------------------------------------------------------- 1 | dateModified: 1623107267 2 | email: 3 | fromEmail: admin@happylager.dev 4 | fromName: Happylager 5 | template: null 6 | transportType: craft\mail\transportadapters\Sendmail 7 | plugins: 8 | redactor: 9 | enabled: '1' 10 | licenseKey: null 11 | schemaVersion: 2.3.0 12 | settings: null 13 | system: 14 | edition: pro 15 | live: true 16 | name: 'Happy Lager' 17 | schemaVersion: 3.6.8 18 | timeZone: UTC 19 | users: 20 | allowPublicRegistration: false 21 | defaultGroup: null 22 | photoSubpath: '' 23 | photoVolumeUid: 1f0ea10d-2be0-4638-88da-105d232f4787 # User Photos 24 | requireEmailVerification: true 25 | -------------------------------------------------------------------------------- /config/project/routes/222c9203-357b-45a9-ab56-ad4df20ad9a0.yaml: -------------------------------------------------------------------------------- 1 | siteUid: null 2 | sortOrder: '1' 3 | template: about 4 | uriParts: 5 | - about 6 | uriPattern: about 7 | -------------------------------------------------------------------------------- /config/project/routes/f2315ceb-90c3-45fe-b6c1-0b847b577a68.yaml: -------------------------------------------------------------------------------- 1 | siteUid: null 2 | sortOrder: '2' 3 | template: search/_results 4 | uriParts: 5 | - search/results 6 | uriPattern: search/results 7 | -------------------------------------------------------------------------------- /config/project/sections/about--1a1f289d-3e32-4409-bfb2-03ec7e7d1b81.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: about 3 | name: About 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: about 19 | uriFormat: about 20 | type: single 21 | -------------------------------------------------------------------------------- /config/project/sections/homepage--735318f3-e53c-4ce1-8dad-4c7a5c7c5bee.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: homepage 3 | name: Homepage 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: index 19 | uriFormat: __home__ 20 | type: single 21 | -------------------------------------------------------------------------------- /config/project/sections/locations--45d3a977-dc34-4bff-a39f-425e100a5e6f.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: locations 3 | name: Locations 4 | propagationMethod: all 5 | siteSettings: 6 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 7 | enabledByDefault: true 8 | hasUrls: false 9 | template: null 10 | uriFormat: null 11 | structure: 12 | maxLevels: 1 13 | uid: 3c13606e-11f9-4cbd-bbae-c29608750caf 14 | type: structure 15 | -------------------------------------------------------------------------------- /config/project/sections/news--f5969f9a-8d3f-487e-9695-cc4e5fbe5efd.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: news 3 | name: News 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: news/_entry 19 | uriFormat: 'news/{slug}' 20 | type: channel 21 | -------------------------------------------------------------------------------- /config/project/sections/services--f6b0cb16-5df8-4b57-9856-c9c2d6b9699e.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: services 3 | name: Services 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: services/_entry 19 | uriFormat: 'services/{slug}' 20 | structure: 21 | maxLevels: 1 22 | uid: aa3fe533-8552-43f9-a172-69982d59561d 23 | type: structure 24 | -------------------------------------------------------------------------------- /config/project/sections/servicesIndex--5fa323b7-9755-4174-bed2-0f2b11c05701.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: servicesIndex 3 | name: 'Services Index' 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: services/_index 19 | uriFormat: services 20 | type: single 21 | -------------------------------------------------------------------------------- /config/project/sections/work--b3a9eef3-9444-4995-84e2-6dc6b60aebd2.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: work 3 | name: Work 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: work/_entry 19 | uriFormat: 'work/{slug}' 20 | type: channel 21 | -------------------------------------------------------------------------------- /config/project/sections/workIndex--1ff1d4d0-499c-41b9-b071-77031c901052.yaml: -------------------------------------------------------------------------------- 1 | enableVersioning: true 2 | handle: workIndex 3 | name: 'Work Index' 4 | previewTargets: 5 | - 6 | __assoc__: 7 | - 8 | - label 9 | - 'Primary entry page' 10 | - 11 | - urlFormat 12 | - '{url}' 13 | propagationMethod: all 14 | siteSettings: 15 | 06f4e499-3cdc-4d64-aec2-9a7d3a143c75: # Happy Lager (en) 16 | enabledByDefault: true 17 | hasUrls: true 18 | template: work/_index 19 | uriFormat: work 20 | type: single 21 | -------------------------------------------------------------------------------- /config/project/siteGroups/268c3c49-6715-4b6a-a1b9-f27313adabd1.yaml: -------------------------------------------------------------------------------- 1 | name: 'Happy Lager (en)' 2 | -------------------------------------------------------------------------------- /config/project/sites/en--06f4e499-3cdc-4d64-aec2-9a7d3a143c75.yaml: -------------------------------------------------------------------------------- 1 | baseUrl: $SITE_URL 2 | enabled: true 3 | handle: en 4 | hasUrls: true 5 | language: en 6 | name: 'Happy Lager (en)' 7 | primary: true 8 | siteGroup: 268c3c49-6715-4b6a-a1b9-f27313adabd1 # Happy Lager (en) 9 | sortOrder: 1 10 | -------------------------------------------------------------------------------- /config/project/volumes/companyLogos--7d6a9bef-727c-4a0c-9791-4f423956de69.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | da21546b-da53-49c7-8821-2685c67df6b4: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\AssetTitleField 27 | warning: null 28 | width: 100 29 | name: Content 30 | sortOrder: 1 31 | handle: companyLogos 32 | hasUrls: true 33 | name: 'Company Logos' 34 | settings: 35 | path: '@assetBasePath/logos' 36 | sortOrder: 3 37 | titleTranslationKeyFormat: null 38 | titleTranslationMethod: site 39 | type: craft\volumes\Local 40 | url: '@assetBaseUrl/logos' 41 | -------------------------------------------------------------------------------- /config/project/volumes/serviceIcons--3fc34ff2-8da7-4a35-8147-f0a2e01392b9.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | 57038148-5c46-43e2-9c5b-9760e04375f2: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\AssetTitleField 27 | warning: null 28 | width: 100 29 | name: Content 30 | sortOrder: 1 31 | handle: serviceIcons 32 | hasUrls: true 33 | name: 'Service Icons' 34 | settings: 35 | path: '@assetBasePath/images/service-icons' 36 | sortOrder: 2 37 | titleTranslationKeyFormat: null 38 | titleTranslationMethod: site 39 | type: craft\volumes\Local 40 | url: '@assetBaseUrl/images/service-icons' 41 | -------------------------------------------------------------------------------- /config/project/volumes/siteAssets--0193dc64-5499-4e28-95dd-f8f603154851.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | e4360fb7-190d-42c5-bde0-e01c03bd127c: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\AssetTitleField 27 | warning: null 28 | width: 100 29 | - 30 | fieldUid: aef80333-1412-4130-bb84-ac3bdbbcbbe2 # Short Description 31 | instructions: null 32 | label: null 33 | required: '0' 34 | tip: null 35 | type: craft\fieldlayoutelements\CustomField 36 | warning: null 37 | width: 100 38 | name: Content 39 | sortOrder: 1 40 | handle: siteAssets 41 | hasUrls: true 42 | name: 'Site Assets' 43 | settings: 44 | path: '@assetBasePath/site' 45 | sortOrder: 1 46 | titleTranslationKeyFormat: null 47 | titleTranslationMethod: site 48 | type: craft\volumes\Local 49 | url: '@assetBaseUrl/site' 50 | -------------------------------------------------------------------------------- /config/project/volumes/userPhotos--1f0ea10d-2be0-4638-88da-105d232f4787.yaml: -------------------------------------------------------------------------------- 1 | fieldLayouts: 2 | 2d9fb3d5-a903-4ef4-81f3-9eb72e49e728: 3 | tabs: 4 | - 5 | elements: 6 | - 7 | autocapitalize: true 8 | autocomplete: false 9 | autocorrect: true 10 | class: null 11 | disabled: false 12 | id: null 13 | instructions: null 14 | label: null 15 | max: null 16 | min: null 17 | name: null 18 | orientation: null 19 | placeholder: null 20 | readonly: false 21 | requirable: false 22 | size: null 23 | step: null 24 | tip: null 25 | title: null 26 | type: craft\fieldlayoutelements\AssetTitleField 27 | warning: null 28 | width: 100 29 | name: Content 30 | sortOrder: 1 31 | handle: userPhotos 32 | hasUrls: false 33 | name: 'User Photos' 34 | settings: 35 | path: '@storage/userphotos' 36 | sortOrder: 4 37 | titleTranslationKeyFormat: null 38 | titleTranslationMethod: site 39 | type: craft\volumes\Local 40 | url: null 41 | -------------------------------------------------------------------------------- /config/redactor/Simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "buttons": ["bold", "italic"], 3 | "toolbarFixed": true 4 | } 5 | -------------------------------------------------------------------------------- /config/redactor/Standard.json: -------------------------------------------------------------------------------- 1 | { 2 | "buttons": [ 3 | "formatting", 4 | "bold", 5 | "italic", 6 | "unorderedlist", 7 | "orderedlist", 8 | "link", 9 | "image", 10 | "video" 11 | ], 12 | "plugins": [ 13 | "fullscreen", 14 | "video" 15 | ], 16 | "toolbarFixed": true 17 | } -------------------------------------------------------------------------------- /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 | 'api' => 'graphql/api', 23 | ]; 24 | -------------------------------------------------------------------------------- /craft: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | load(); 17 | } 18 | 19 | // Load and run Craft 20 | define('CRAFT_ENVIRONMENT', getenv('ENVIRONMENT') ?: 'production'); 21 | $app = require CRAFT_VENDOR_PATH.'/craftcms/cms/bootstrap/console.php'; 22 | $exitCode = $app->run(); 23 | exit($exitCode); 24 | -------------------------------------------------------------------------------- /craft.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | rem ------------------------------------------------------------- 4 | rem Craft command line bootstrap script for Windows 5 | rem ------------------------------------------------------------- 6 | 7 | @setlocal 8 | 9 | set CRAFT_PATH=%~dp0 10 | 11 | if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe 12 | 13 | "%PHP_COMMAND%" "%CRAFT_PATH%craft" %* 14 | 15 | @endlocal 16 | -------------------------------------------------------------------------------- /gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | // Project Configuration 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | watch: { 6 | sass: { 7 | files: ['web/assets/css/sass/*.scss'], 8 | tasks: 'sass' 9 | }, 10 | concat: { 11 | files: ['<%= concat.dist.src %>', '<%= concat.dist.dest %>'], 12 | tasks: 'concat' 13 | }, 14 | uglify: { 15 | files: ['<%= uglify.build.src %>', '<%= uglify.build.dest %>'], 16 | tasks: 'uglify' 17 | }, 18 | js: { 19 | files: ['web/assets/js/**', 'src/assets/js/*.js'], 20 | tasks: ['jshint'] 21 | } 22 | }, 23 | sass: { 24 | dist: { 25 | files: { 26 | 'web/assets/css/happylager.css': 'web/assets/css/sass/happylager.scss' 27 | } 28 | } 29 | }, 30 | imageoptim: { 31 | myTask: { 32 | src: ['web/assets/site', 'web/assets/images'] 33 | } 34 | }, 35 | uglify: { 36 | options: { 37 | banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 38 | }, 39 | build: { 40 | src: 'web/assets/js/master.js', 41 | dest: 'web/assets/js/master.min.js' 42 | } 43 | }, 44 | concat: { 45 | options: { 46 | separator: ';' 47 | }, 48 | dist: { 49 | src: ['web/assets/js/jquery-1.10.2.js', 'web/assets/js/plugins/*.js', 'web/assets/js/main.js'], 50 | dest: 'web/assets/js/master.js' 51 | } 52 | }, 53 | jshint: { 54 | all: ['gruntfile.js', 'src/js/main.js'] 55 | } 56 | }); 57 | 58 | //Load NPM tasks 59 | grunt.loadNpmTasks('grunt-contrib-sass'); 60 | grunt.loadNpmTasks('grunt-contrib-concat'); 61 | grunt.loadNpmTasks('grunt-contrib-uglify'); 62 | grunt.loadNpmTasks('grunt-contrib-watch'); 63 | grunt.loadNpmTasks('grunt-contrib-jshint'); 64 | grunt.loadNpmTasks('grunt-imageoptim'); 65 | 66 | //Making grunt default to force in order not to break the project. 67 | grunt.option('force', true); 68 | 69 | // Optimize images. 70 | grunt.registerTask('img', ['imageoptim']); 71 | 72 | // Default task(s). 73 | grunt.registerTask('default', ['sass','concat', 'uglify', 'jshint', 'watch']); 74 | 75 | }; 76 | -------------------------------------------------------------------------------- /modules/Module.php: -------------------------------------------------------------------------------- 1 | getModule('my-module')`. 11 | * 12 | * You can change its module ID ("my-module") to something else from 13 | * config/app.php. 14 | * 15 | * If you want the module to get loaded on every request, uncomment this line 16 | * in config/app.php: 17 | * 18 | * 'bootstrap' => ['my-module'] 19 | * 20 | * Learn more about Yii module development in Yii's documentation: 21 | * http://www.yiiframework.com/doc-2.0/guide-structure-modules.html 22 | */ 23 | class Module extends \yii\base\Module 24 | { 25 | /** 26 | * Initializes the module. 27 | */ 28 | public function init() 29 | { 30 | Craft::setAlias('@modules', __DIR__); 31 | parent::init(); 32 | 33 | // Custom initialization code goes here... 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HappyLager", 3 | "version": "0.0.1", 4 | "private": true, 5 | "devDependencies": { 6 | "grunt": "latest", 7 | "grunt-contrib-sass": "latest", 8 | "grunt-contrib-jshint": "latest", 9 | "grunt-contrib-concat": "latest", 10 | "grunt-contrib-uglify": "0.3.2", 11 | "grunt-contrib-watch": "latest", 12 | "grunt-imageoptim": "latest" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /storage/.gitignore: -------------------------------------------------------------------------------- 1 | backups 2 | logs 3 | runtime 4 | -------------------------------------------------------------------------------- /storage/config-deltas/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/userphotos/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /templates/_includes/article_body.html: -------------------------------------------------------------------------------- 1 | {# 2 | # Article Body include template 3 | # ----------------------------- 4 | # 5 | # This template is used to output HTML for an "Article Body" Matrix field. 6 | # 7 | # An `entry` variable is expected to be defined. 8 | -#} 9 | 10 | {% macro getPosition(block) %} 11 | {%- apply spaceless %} 12 | {% set positionedTypes = ['text', 'pullQuote', 'image', 'quote'] %} 13 | {{ block.type.handle in positionedTypes and block.position ? block.position : 'center' }} 14 | {% endapply -%} 15 | {% endmacro %} 16 | 17 | {% from _self import getPosition %} 18 | 19 | {% set prevType = null %} 20 | {% set prevPosition = null %} 21 | {% set nextType = null %} 22 | {% set nextPosition = null %} 23 | {% set closedLastRow = true %} 24 | {% set blocks = entry.articleBody.all() %} 25 | 26 | {% for i, block in blocks %} 27 | 28 | {% set type = (nextType ?: block.type.handle) %} 29 | {% set position = (nextPosition ?: getPosition(block)~'') %} 30 | 31 | {% set nextType = (not loop.last ? blocks[i+1].type.handle) %} 32 | {% set nextPosition = (not loop.last ? getPosition(blocks[i+1])~'') %} 33 | 34 | {# Is this block floated to the left or right? #} 35 | {% set isFloat = position in ['left', 'right'] %} 36 | 37 | {# Is this a breakout block (a sole floated block before a centered block)? #} 38 | {% set isBreakout = ( 39 | isFloat and 40 | type in ['pullQuote', 'image'] and 41 | (position == 'left' or prevPosition != 'left') and 42 | nextPosition == 'center' 43 | ) %} 44 | 45 | {# Are we starting a new row? #} 46 | {% if position == 'full' %} 47 |
{{ block.pullQuote }}
79 |113 |121 | 122 | {% endswitch %} 123 | 124 | {% if isFloat %} 125 |114 |120 |{{ block.quote }}
115 | 116 | {% if block.attribution %} 117 | 118 | {% endif %} 119 |
{{ locationEntry.address|nl2br }}
46 | {% endif %} 47 | 48 | {% if locationEntry.contactMethods|length %} 49 |Work with Happy Lager and you will find an endless
26 | tap of ideas, wit and creativity.
27 |
{{ block.quote }}86 | {% set photo = block.photo.one() %} 87 | {% if photo %} 88 |
{{ block.cite }}
91 |80 | {% if newsEntry.type == 'link' %} 81 | Check it out 82 | {% else %} 83 | {% if not isFeaturedEntry %} 84 | 85 | | 86 | {% endif %} 87 | Read More 88 | {% endif %} 89 |
90 |{{ workEntry.subheading }}
89 | {% endif %} 90 | 91 |