7 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8 | */
9 |
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/app.js": "/js/app.js",
3 | "/css/app.css": "/css/app.css"
4 | }
5 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/vendor/livewire/manifest.json:
--------------------------------------------------------------------------------
1 | {"/livewire.js":"/livewire.js?id=21fa1dd78491a49255cd"}
--------------------------------------------------------------------------------
/public/web.config:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | require('./bootstrap');
2 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | window._ = require('lodash');
2 |
3 | /**
4 | * We'll load the axios HTTP library which allows us to easily issue requests
5 | * to our Laravel back-end. This library automatically handles sending the
6 | * CSRF token as a header based on the value of the "XSRF" token cookie.
7 | */
8 |
9 | window.axios = require('axios');
10 |
11 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
12 |
13 | /**
14 | * Echo exposes an expressive API for subscribing to channels and listening
15 | * for events that are broadcast by Laravel. Echo and event broadcasting
16 | * allows your team to easily build robust real-time web applications.
17 | */
18 |
19 | // import Echo from 'laravel-echo';
20 |
21 | // window.Pusher = require('pusher-js');
22 |
23 | // window.Echo = new Echo({
24 | // broadcaster: 'pusher',
25 | // key: process.env.MIX_PUSHER_APP_KEY,
26 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER,
27 | // forceTLS: true
28 | // });
29 |
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'password' => 'The provided password is incorrect.',
18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
19 |
20 | ];
21 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have emailed your password reset link!',
18 | 'throttled' => 'Please wait before retrying.',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that email address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/en/validation.php:
--------------------------------------------------------------------------------
1 | 'The :attribute must be accepted.',
17 | 'accepted_if' => 'The :attribute must be accepted when :other is :value.',
18 | 'active_url' => 'The :attribute is not a valid URL.',
19 | 'after' => 'The :attribute must be a date after :date.',
20 | 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
21 | 'alpha' => 'The :attribute must only contain letters.',
22 | 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
23 | 'alpha_num' => 'The :attribute must only contain letters and numbers.',
24 | 'array' => 'The :attribute must be an array.',
25 | 'before' => 'The :attribute must be a date before :date.',
26 | 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
27 | 'between' => [
28 | 'numeric' => 'The :attribute must be between :min and :max.',
29 | 'file' => 'The :attribute must be between :min and :max kilobytes.',
30 | 'string' => 'The :attribute must be between :min and :max characters.',
31 | 'array' => 'The :attribute must have between :min and :max items.',
32 | ],
33 | 'boolean' => 'The :attribute field must be true or false.',
34 | 'confirmed' => 'The :attribute confirmation does not match.',
35 | 'current_password' => 'The password is incorrect.',
36 | 'date' => 'The :attribute is not a valid date.',
37 | 'date_equals' => 'The :attribute must be a date equal to :date.',
38 | 'date_format' => 'The :attribute does not match the format :format.',
39 | 'different' => 'The :attribute and :other must be different.',
40 | 'digits' => 'The :attribute must be :digits digits.',
41 | 'digits_between' => 'The :attribute must be between :min and :max digits.',
42 | 'dimensions' => 'The :attribute has invalid image dimensions.',
43 | 'distinct' => 'The :attribute field has a duplicate value.',
44 | 'email' => 'The :attribute must be a valid email address.',
45 | 'ends_with' => 'The :attribute must end with one of the following: :values.',
46 | 'exists' => 'The selected :attribute is invalid.',
47 | 'file' => 'The :attribute must be a file.',
48 | 'filled' => 'The :attribute field must have a value.',
49 | 'gt' => [
50 | 'numeric' => 'The :attribute must be greater than :value.',
51 | 'file' => 'The :attribute must be greater than :value kilobytes.',
52 | 'string' => 'The :attribute must be greater than :value characters.',
53 | 'array' => 'The :attribute must have more than :value items.',
54 | ],
55 | 'gte' => [
56 | 'numeric' => 'The :attribute must be greater than or equal to :value.',
57 | 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
58 | 'string' => 'The :attribute must be greater than or equal to :value characters.',
59 | 'array' => 'The :attribute must have :value items or more.',
60 | ],
61 | 'image' => 'The :attribute must be an image.',
62 | 'in' => 'The selected :attribute is invalid.',
63 | 'in_array' => 'The :attribute field does not exist in :other.',
64 | 'integer' => 'The :attribute must be an integer.',
65 | 'ip' => 'The :attribute must be a valid IP address.',
66 | 'ipv4' => 'The :attribute must be a valid IPv4 address.',
67 | 'ipv6' => 'The :attribute must be a valid IPv6 address.',
68 | 'json' => 'The :attribute must be a valid JSON string.',
69 | 'lt' => [
70 | 'numeric' => 'The :attribute must be less than :value.',
71 | 'file' => 'The :attribute must be less than :value kilobytes.',
72 | 'string' => 'The :attribute must be less than :value characters.',
73 | 'array' => 'The :attribute must have less than :value items.',
74 | ],
75 | 'lte' => [
76 | 'numeric' => 'The :attribute must be less than or equal to :value.',
77 | 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
78 | 'string' => 'The :attribute must be less than or equal to :value characters.',
79 | 'array' => 'The :attribute must not have more than :value items.',
80 | ],
81 | 'max' => [
82 | 'numeric' => 'The :attribute must not be greater than :max.',
83 | 'file' => 'The :attribute must not be greater than :max kilobytes.',
84 | 'string' => 'The :attribute must not be greater than :max characters.',
85 | 'array' => 'The :attribute must not have more than :max items.',
86 | ],
87 | 'mimes' => 'The :attribute must be a file of type: :values.',
88 | 'mimetypes' => 'The :attribute must be a file of type: :values.',
89 | 'min' => [
90 | 'numeric' => 'The :attribute must be at least :min.',
91 | 'file' => 'The :attribute must be at least :min kilobytes.',
92 | 'string' => 'The :attribute must be at least :min characters.',
93 | 'array' => 'The :attribute must have at least :min items.',
94 | ],
95 | 'multiple_of' => 'The :attribute must be a multiple of :value.',
96 | 'not_in' => 'The selected :attribute is invalid.',
97 | 'not_regex' => 'The :attribute format is invalid.',
98 | 'numeric' => 'The :attribute must be a number.',
99 | 'password' => 'The password is incorrect.',
100 | 'present' => 'The :attribute field must be present.',
101 | 'regex' => 'The :attribute format is invalid.',
102 | 'required' => 'The :attribute field is required.',
103 | 'required_if' => 'The :attribute field is required when :other is :value.',
104 | 'required_unless' => 'The :attribute field is required unless :other is in :values.',
105 | 'required_with' => 'The :attribute field is required when :values is present.',
106 | 'required_with_all' => 'The :attribute field is required when :values are present.',
107 | 'required_without' => 'The :attribute field is required when :values is not present.',
108 | 'required_without_all' => 'The :attribute field is required when none of :values are present.',
109 | 'prohibited' => 'The :attribute field is prohibited.',
110 | 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
111 | 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
112 | 'prohibits' => 'The :attribute field prohibits :other from being present.',
113 | 'same' => 'The :attribute and :other must match.',
114 | 'size' => [
115 | 'numeric' => 'The :attribute must be :size.',
116 | 'file' => 'The :attribute must be :size kilobytes.',
117 | 'string' => 'The :attribute must be :size characters.',
118 | 'array' => 'The :attribute must contain :size items.',
119 | ],
120 | 'starts_with' => 'The :attribute must start with one of the following: :values.',
121 | 'string' => 'The :attribute must be a string.',
122 | 'timezone' => 'The :attribute must be a valid timezone.',
123 | 'unique' => 'The :attribute has already been taken.',
124 | 'uploaded' => 'The :attribute failed to upload.',
125 | 'url' => 'The :attribute must be a valid URL.',
126 | 'uuid' => 'The :attribute must be a valid UUID.',
127 |
128 | /*
129 | |--------------------------------------------------------------------------
130 | | Custom Validation Language Lines
131 | |--------------------------------------------------------------------------
132 | |
133 | | Here you may specify custom validation messages for attributes using the
134 | | convention "attribute.rule" to name the lines. This makes it quick to
135 | | specify a specific custom language line for a given attribute rule.
136 | |
137 | */
138 |
139 | 'custom' => [
140 | 'attribute-name' => [
141 | 'rule-name' => 'custom-message',
142 | ],
143 | ],
144 |
145 | /*
146 | |--------------------------------------------------------------------------
147 | | Custom Validation Attributes
148 | |--------------------------------------------------------------------------
149 | |
150 | | The following language lines are used to swap our attribute placeholder
151 | | with something more reader friendly such as "E-Mail Address" instead
152 | | of "email". This simply helps us make our message more expressive.
153 | |
154 | */
155 |
156 | 'attributes' => [],
157 |
158 | ];
159 |
--------------------------------------------------------------------------------
/resources/views/admin/blocks/contact-form.blade.php:
--------------------------------------------------------------------------------
1 | @twillBlockTitle('Contact Form')
2 | @twillBlockIcon('text')
3 | @twillBlockGroup('app')
4 |
5 | @formField('wysiwyg', [
6 | 'name' => 'text',
7 | 'label' => 'Content next to the form',
8 | 'placeholder' => 'Text',
9 | 'toolbarOptions' => [
10 | 'bold',
11 | 'italic',
12 | ['list' => 'bullet'],
13 | ['list' => 'ordered'],
14 | [ 'script' => 'super' ],
15 | [ 'script' => 'sub' ],
16 | 'link',
17 | 'clean'
18 | ],
19 | 'translated' => true
20 | ])
21 |
22 | @formField('input', [
23 | 'name' => 'success_message',
24 | 'label' => __('Success message'),
25 | 'translated' => true,
26 | ])
27 |
--------------------------------------------------------------------------------
/resources/views/admin/blocks/faq-list.blade.php:
--------------------------------------------------------------------------------
1 | @twillBlockTitle('Faq List')
2 | @twillBlockIcon('text')
3 | @twillBlockGroup('app')
4 |
5 | @formField('repeater', ['type' => 'faq-item', 'name' => 'Faq entries'])
6 |
--------------------------------------------------------------------------------
/resources/views/admin/blocks/simple-text.blade.php:
--------------------------------------------------------------------------------
1 | @twillBlockTitle('Simple Text')
2 | @twillBlockIcon('text')
3 | @twillBlockGroup('app')
4 |
5 | @formField('input', [
6 | 'name' => 'title',
7 | 'label' => 'Title',
8 | 'translated' => true,
9 | ])
10 |
11 | @formField('wysiwyg', [
12 | 'name' => 'text',
13 | 'label' => 'Text',
14 | 'placeholder' => 'Text',
15 | 'toolbarOptions' => [
16 | 'bold',
17 | 'italic',
18 | ['list' => 'bullet'],
19 | ['list' => 'ordered'],
20 | [ 'script' => 'super' ],
21 | [ 'script' => 'sub' ],
22 | 'link',
23 | 'clean'
24 | ],
25 | 'translated' => true
26 | ])
27 |
--------------------------------------------------------------------------------
/resources/views/admin/blocks/text-with-image.blade.php:
--------------------------------------------------------------------------------
1 | @twillBlockTitle('Text With Image')
2 | @twillBlockIcon('text')
3 | @twillBlockGroup('app')
4 |
5 | @formField('medias', [
6 | 'name' => 'content_square',
7 | 'label' => 'Image',
8 | ])
9 |
10 | @formField('input', [
11 | 'name' => 'title',
12 | 'label' => 'Title',
13 | 'translated' => true,
14 | ])
15 |
16 | @formField('wysiwyg', [
17 | 'name' => 'text',
18 | 'label' => 'Text',
19 | 'placeholder' => 'Text',
20 | 'toolbarOptions' => [
21 | 'bold',
22 | 'italic',
23 | ['list' => 'bullet'],
24 | ['list' => 'ordered'],
25 | [ 'script' => 'super' ],
26 | [ 'script' => 'sub' ],
27 | ['header' => [2,3,4,5,6,false]],
28 | 'link',
29 | 'clean'
30 | ],
31 | 'translated' => true
32 | ])
33 |
--------------------------------------------------------------------------------
/resources/views/admin/example-page.blade.php:
--------------------------------------------------------------------------------
1 | @extends('twill::layouts.free')
2 | @section('customPageContent')
3 | @livewireScripts
4 | @livewireStyles
5 |
6 | hello world!
7 |
8 | Below is a livewire component:
9 |
10 |
11 | @endsection
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/admin/repeaters/faq-item.blade.php:
--------------------------------------------------------------------------------
1 | @twillRepeaterTitle('Faq item')
2 |
3 | @formField('input', [
4 | 'name' => 'title',
5 | 'label' => 'Title',
6 | 'translated' => true,
7 | ])
8 |
9 | @formField('wysiwyg', [
10 | 'name' => 'text',
11 | 'label' => 'Text',
12 | 'placeholder' => 'Text',
13 | 'toolbarOptions' => [
14 | 'bold',
15 | 'italic',
16 | ['list' => 'bullet'],
17 | ['list' => 'ordered'],
18 | [ 'script' => 'super' ],
19 | [ 'script' => 'sub' ],
20 | 'link',
21 | 'clean'
22 | ],
23 | 'translated' => true
24 | ])
25 |
26 | @formField('checkbox', [
27 | 'name' => 'open',
28 | 'label' => 'Open by default'
29 | ])
30 |
31 | @formField('input', [
32 | 'name' => 'cta_text',
33 | 'label' => 'Call to action text',
34 | 'translated' => true,
35 | ])
36 |
37 | @formField('browser', [
38 | 'moduleName' => 'content.pages',
39 | 'name' => 'cta_target',
40 | 'label' => 'Call to action target',
41 | 'max' => 1,
42 | ])
43 |
--------------------------------------------------------------------------------
/resources/views/admin/repeaters/menu_item.blade.php:
--------------------------------------------------------------------------------
1 | @twillRepeaterTitle('Menu Item')
2 | @twillRepeaterTitleField('title', ['hidePrefix' => false])
3 |
4 | @formField('input', [
5 | 'name' => 'title',
6 | 'label' => 'Title',
7 | 'translated' => true,
8 | ])
9 |
10 | @formField('radios', [
11 | 'label' => 'Link Type',
12 | 'name' => 'destination',
13 | 'inline' => true,
14 | 'options' => [
15 | [
16 | 'value' => 'internal',
17 | 'label' => 'Internal'
18 | ],
19 | [
20 | 'value' => 'external',
21 | 'label' => 'External'
22 | ],
23 | [
24 | 'value' => 'homepage',
25 | 'label' => 'Homepage'
26 | ],
27 | ]
28 | ])
29 | {{-- Show Browser field to select internal item --}}
30 |
31 | @formField('browser', [
32 | 'label' => 'Link',
33 | 'max' => 1,
34 | 'name' => 'linkables',
35 | 'moduleName' => 'content.pages'
36 | ])
37 |
38 |
39 | {{-- Show text field to enter url if an external link is selected --}}
40 |
41 | @formField('input', [
42 | 'name' => 'url',
43 | 'label' => 'Url',
44 | 'translated' => true,
45 | ])
46 |
47 |
48 |
49 | @formField('input', [
50 | 'name' => 'anchor',
51 | 'label' => 'Anchor',
52 | 'prefix' => '#'
53 | ])
54 | @formField('input', [
55 | 'name' => 'query_string',
56 | 'label' => 'Query String',
57 | 'prefix' => '?'
58 | ])
59 | @formField('input', [
60 | 'name' => 'id_attribute',
61 | 'label' => 'HTML ID'
62 | ])
63 | @formField('input', [
64 | 'name' => 'class_attribute',
65 | 'label' => 'CSS Class(es)',
66 | 'note' => 'A space separated list of classes to be added to the item'
67 | ])
68 | @formField('checkbox', [
69 | 'name' => 'new_window',
70 | 'label' => 'Open link in a new tab/window'
71 | ])
72 |
73 |
--------------------------------------------------------------------------------
/resources/views/admin/settings/footer.blade.php:
--------------------------------------------------------------------------------
1 | @extends('twill::layouts.settings')
2 |
3 | @php
4 | $pageRepository = app(\App\Twill\Capsules\Pages\Repositories\PageRepository::class);
5 |
6 | $pages = $pageRepository->listAll()->map(function($label, $value) {
7 | return [
8 | 'value' => $value,
9 | 'label' => $label,
10 | ];
11 | })->values()->toArray();
12 |
13 | @endphp
14 |
15 | @section('contentFields')
16 | @formField('wysiwyg', [
17 | 'name' => 'text',
18 | 'label' => 'Left side content',
19 | 'placeholder' => 'Text',
20 | 'toolbarOptions' => [
21 | 'bold',
22 | 'italic',
23 | ['list' => 'bullet'],
24 | ['list' => 'ordered'],
25 | [ 'script' => 'super' ],
26 | [ 'script' => 'sub' ],
27 | 'link',
28 | 'clean'
29 | ],
30 | 'translated' => true
31 | ])
32 |
33 | @formField('input', [
34 | 'name' => 'copyright_notice',
35 | 'label' => __('Copyright notice'),
36 | 'translated' => true,
37 | ])
38 | @stop
39 |
--------------------------------------------------------------------------------
/resources/views/admin/settings/pages.blade.php:
--------------------------------------------------------------------------------
1 | @extends('twill::layouts.settings')
2 |
3 | @php
4 | $pageRepository = app(\App\Twill\Capsules\Pages\Repositories\PageRepository::class);
5 |
6 | $pages = $pageRepository->listAll()->map(function($label, $value) {
7 | return [
8 | 'value' => $value,
9 | 'label' => $label,
10 | ];
11 | })->values()->toArray();
12 |
13 | @endphp
14 |
15 | @section('contentFields')
16 | @formField('select', [
17 | 'name' => 'homepage',
18 | 'label' => 'Homepage',
19 | 'options' => $pages
20 | ])
21 | @formField('select', [
22 | 'name' => 'privacy_policy',
23 | 'label' => 'Privacy policy',
24 | 'options' => $pages
25 | ])
26 | @formField('select', [
27 | 'name' => 'cookies',
28 | 'label' => 'Cookies',
29 | 'options' => $pages
30 | ])
31 | @formField('select', [
32 | 'name' => 'terms_and_conditions',
33 | 'label' => 'Terms and conditions',
34 | 'options' => $pages
35 | ])
36 | @stop
37 |
--------------------------------------------------------------------------------
/resources/views/components/footer.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {!! get_config('text', 'footer') !!}
4 |
5 |
6 |
7 |
8 | {{get_config('copyright_notice', 'footer')}}
9 |
10 |
21 |
22 |
--------------------------------------------------------------------------------
/resources/views/components/site/menu.blade.php:
--------------------------------------------------------------------------------
1 | @php
2 | // Code for menus.
3 | // This is just hardcoded for now, but could be made into a select.
4 | $menuRepo = app()->make(\App\Twill\Capsules\Menus\Repositories\MenuRepository::class);
5 | /** @var \App\Twill\Capsules\Menus\Models\Menu $menu */
6 | $menu = $menuRepo->first();
7 | @endphp
8 |
9 |
10 |
11 | logo comes here
12 |
13 |
17 | {{__('Open menu')}}
18 |
19 |
20 |
21 | @if ($menu)
22 |
23 | @php /** @var \App\Twill\Capsules\Menus\Models\MenuItem $menuItem */ @endphp
24 | @foreach ($menu->menu_items as $menuItem)
25 | {{$menuItem->translation->title}}
27 | @endforeach
28 |
29 | @endif
30 |
39 |
40 |
43 |
44 |
45 |
46 |
47 | @if ($menu)
48 | @foreach ($menu->menu_items as $menuItem)
49 | {{$menuItem->getAttribute('title')}}
51 | @endforeach
52 | @endif
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/resources/views/components/site/menu/item.blade.php:
--------------------------------------------------------------------------------
1 |
5 |
9 | {{$slot}}
10 |
11 | @if($content ?? false)
12 |
15 | @endif
16 |
17 | @if($content ?? false)
18 |
29 | @endif
30 |
31 |
--------------------------------------------------------------------------------
/resources/views/components/site/menu/mobile-item.blade.php:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/resources/views/components/success-alert.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{$message}}
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/resources/views/emails/contact-form-submission.blade.php:
--------------------------------------------------------------------------------
1 | Subject: {{ $title }}
2 | From: {{ $email }}
3 | Phone: {{ $phone_number }}
4 | Message: {{ $content }}
5 |
--------------------------------------------------------------------------------
/resources/views/frontend/page.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ $seo->title }}
5 |
6 |
7 |
8 | @livewireStyles
9 |
10 |
11 |
12 |
13 | {!! $item->renderBlocks(false) !!}
14 |
15 |
16 |
17 |
18 | @livewireScripts
19 |
20 |
21 |
--------------------------------------------------------------------------------
/resources/views/livewire/contact-form.blade.php:
--------------------------------------------------------------------------------
1 | @php
2 | $inputClasses = 'w-full p-4 border border-darkblue-500';
3 | $errorClasses = 'border-red-500 border';
4 | @endphp
5 |
6 | @if ($saved)
7 |
8 | @else
9 |
56 | @endif
57 |
58 |
--------------------------------------------------------------------------------
/resources/views/livewire/example-livewire-component.blade.php:
--------------------------------------------------------------------------------
1 |
2 | The current count is: {{$count}}
3 |
4 | Increment the counter.
5 |
6 |
--------------------------------------------------------------------------------
/resources/views/site/blocks/contact-form.blade.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Webisolv/base-twill-project/0b8f01565978a7f9c63d33aec02ca9d93baa9036/resources/views/site/blocks/contact-form.blade.php
--------------------------------------------------------------------------------
/resources/views/site/blocks/faq-item.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{$block->translatedInput('title')}}
4 |
5 |
6 |
9 | {!! $block->translatedInput('text') !!}
10 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/site/blocks/faq-list.blade.php:
--------------------------------------------------------------------------------
1 | @php
2 | /** @var \A17\Twill\Models\Block $block */
3 | @endphp
4 |
5 | @foreach($block->children as $child)
6 | @include('site.blocks.faq-item', ['block' => $child, 'background' => $block->input('background')])
7 | @endforeach
8 |
9 |
--------------------------------------------------------------------------------
/resources/views/site/blocks/simple-text.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
{{ $block->translatedInput('title') }}
3 | {!! $block->translatedInput('text') !!}
4 |
5 |
--------------------------------------------------------------------------------
/resources/views/site/blocks/text-with-image.blade.php:
--------------------------------------------------------------------------------
1 | @php
2 | $image = $block->imageAsArray('content_square', 'desktop');
3 | @endphp
4 |
5 |
6 |
7 |
8 |
9 |
10 |
{{$block->translatedInput('title')}}
11 | {!! $block->translatedInput('text') !!}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/site/layouts/block.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Preview
5 |
6 |
7 |
8 | @livewireStyles
9 |
10 |
11 |
12 | @yield('content')
13 |
14 |
15 |
16 | @livewireScripts
17 |
18 |
19 |
--------------------------------------------------------------------------------
/routes/admin.php:
--------------------------------------------------------------------------------
1 | get('/customPage', [\App\Http\Controllers\Admin\ExampleController::class, 'index']);
4 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/user', function (Request $request) {
18 | return $request->user();
19 | });
20 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 | LaravelLocalization::setLocale(), 'middleware' => ['localizationRedirect', 'localeSessionRedirect']],
19 | function () {
20 | Route::get('/', [PageDisplayController::class, 'landingPage'])->name('front.homepage');
21 |
22 | Route::get('/{slug}', [PageDisplayController::class, 'displayPage'])->name('front.page');
23 | }
24 | );
25 |
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const colors = require('tailwindcss/colors');
2 |
3 | module.exports = {
4 | purge: [
5 | './resources/**/*.blade.php',
6 | './resources/**/*.js',
7 | './resources/**/*.vue',
8 | './app/Twill/Capsules/**/*.blade.php',
9 | ],
10 | darkMode: false,
11 | theme: {
12 | extend: {
13 | colors: {
14 | brown: {
15 | "50": "#fdfaf7",
16 | "100": "#fbf8f3",
17 | "200": "#f9f3eb",
18 | "300": "#f8f1e7",
19 | "400": "#f6ece0",
20 | "500": "#f4eadc",
21 | "600": "#dcb989",
22 | "700": "#c58b3a",
23 | "800": "#765323",
24 | "900": "#271c0c"
25 | },
26 | darkblue: {
27 | "50": "#fcfcfd",
28 | "100": "#fcfcfd",
29 | "200": "#d9deed",
30 | "300": "#afbada",
31 | "400": "#7b8dc1",
32 | "500": "#253050",
33 | "600": "#2f3d65",
34 | "700": "#394979",
35 | "800": "#3c4d80",
36 | "900": "#43568e"
37 | },
38 | accentRed: {
39 | "50": "#fffbfa",
40 | "100": "#fffbfa",
41 | "200": "#fce1df",
42 | "300": "#f8c0ba",
43 | "400": "#f49a90",
44 | "500": "#ed5b4a",
45 | "600": "#ea4633",
46 | "700": "#e32b17",
47 | "800": "#cc2715",
48 | "900": "#ab2111"
49 | }
50 | },
51 | transitionProperty: {'height': 'height'},
52 | typography: {
53 | light: {
54 | css: {
55 | color: '#f4eadc',
56 | strong: {
57 | color: '#f4eadc'
58 | }
59 | }
60 | }
61 | },
62 | height: {
63 | "s-1/3": '33vh',
64 | },
65 | minHeight: {
66 | "96": '24rem',
67 | }
68 | },
69 | },
70 | variants: {
71 | extend: {
72 | margin: ['group-hover'],
73 | padding: ['group-hover'],
74 | },
75 | },
76 | plugins: [
77 | require('@tailwindcss/typography'),
78 | ],
79 | };
80 |
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | const mix = require('laravel-mix');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Mix Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Mix provides a clean, fluent API for defining some Webpack build steps
9 | | for your Laravel applications. By default, we are compiling the CSS
10 | | file for the application as well as bundling up all the JS files.
11 | |
12 | */
13 |
14 |
15 | mix.js("resources/js/app.js", "public/js")
16 | .postCss("resources/css/app.css", "public/css", [require("tailwindcss"),]);
17 |
--------------------------------------------------------------------------------