diff options
Diffstat (limited to 'Year_3/TSDWL/LARAVEL/iBook/resources')
11 files changed, 317 insertions, 3 deletions
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css b/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js b/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js new file mode 100644 index 0000000..40c55f6 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js @@ -0,0 +1 @@ +require('./bootstrap'); diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js b/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js new file mode 100644 index 0000000..6922577 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php @@ -0,0 +1,20 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + + 'failed' => 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Previous', + 'next' => 'Next »', + +]; diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reset Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'reset' => 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php new file mode 100644 index 0000000..87fb437 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php @@ -0,0 +1,162 @@ +<?php + +return [ + + /* + |-------------------------------------------------------------------------- + | Validation Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines contain the default error messages used by + | the validator class. Some of these rules have multiple versions such + | as the size rules. Feel free to tweak each of these messages here. + | + */ + + 'accepted' => 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php index 398c7b4..5bd20b0 100644 --- a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php @@ -7,11 +7,11 @@ @csrf <div> <label for="name">Name: </label> - <input type="text" name="name" id="name"> + <input type="text" name="name" id="name" required> </div> <div> <label for="published_at">Published at: </label> - <input type="date" name="published_at" id="published_at"> + <input type="datetime" name="published_at" id="published_at"> </div> <div> <label for="is_online">Is online?: </label> @@ -19,8 +19,14 @@ </div> <div> <label for="author_id">Author: </label> - <input type="text" name="name" id="name"> + <select id="author_id" name="author_id"> + <option value="">Select an author</option> + @foreach ($authors as $author) + <option value="{{ $author->id }}">{{ $author->name }}</option> + @endforeach + </select> </div> + <button type="submit">Save</button> </form> @endsection diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php new file mode 100644 index 0000000..1889b18 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php @@ -0,0 +1,34 @@ +@extends('layout') + +@section('content') +<h1>Edit `{{ $book->name }}`</h1> + +<form method="post" action="/books/<?php echo $book->id; ?>"> + @csrf + @method('put') + <div> + <label for="name">Name: </label> + <input type="text" name="name" id="name" required value="<?php echo $book->name; ?>"> + </div> + <div> + <label for="published_at">Published at: </label> + <input type="datetime" name="published_at" id="published_at" value="<?php echo $book->published_at; ?>"> + </div> + <div> + <label for="is_online">Is online?: </label> + <input type="checkbox" name="is_online" id="is_online" <?php echo ($book->is_online ? 'checked': ''); ?>> + </div> + <div> + <label for="author_id">Author: </label> + <select id="author_id" name="author_id"> + <option value="">Select an author</option> + @foreach ($authors as $author) + <option value="{{ $author->id }}" <?php if($author->id == $book->author_id) { echo 'selected'; + } ?>> +{{ $author->name }}</option> + @endforeach + </select> + </div> + <button type="submit">Save</button> +</form> +@endsection diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php new file mode 100644 index 0000000..65a4a42 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php @@ -0,0 +1,15 @@ +@extends('layout') + +@section('content') + +<h1>Hello world! They're my books:</h1> +@foreach ($books as $book) +<p> + <a href="/books/{{ $book->id }}">{{ $book->name }}</a> + @if ($book->author_id) + <span>by {{ $book->author->name }}</span> + @endif +</p> +@endforeach + +@endsection diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php new file mode 100644 index 0000000..e19db99 --- /dev/null +++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<html> + <head></head> + <body> + @yield('content') + </body> +</html> |