From 7149647b729b2aa30d76346a7cc3da37c1c692ca Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 13 May 2019 15:50:36 +0200 Subject: Initial commit. --- resources/assets/js/app.js | 22 +++ resources/assets/js/bootstrap.js | 56 +++++++ .../assets/js/components/ExampleComponent.vue | 23 +++ resources/assets/sass/_variables.scss | 18 +++ resources/assets/sass/app.scss | 14 ++ resources/lang/de/pagination.php | 20 +++ resources/lang/en/auth.php | 19 +++ resources/lang/en/pagination.php | 19 +++ resources/lang/en/passwords.php | 22 +++ resources/lang/en/validation.php | 121 ++++++++++++++ resources/views/index.blade.php | 162 +++++++++++++++++++ resources/views/layouts/base.blade.php | 91 +++++++++++ resources/views/offer.blade.php | 167 ++++++++++++++++++++ resources/views/paginate.blade.php | 36 +++++ resources/views/search.blade.php | 175 +++++++++++++++++++++ resources/views/snippets/footer.blade.php | 47 ++++++ resources/views/snippets/navbar.blade.php | 61 +++++++ resources/views/snippets/sortbuttons.blade.php | 109 +++++++++++++ .../views/vendor/pagination/bootstrap-4.blade.php | 36 +++++ .../views/vendor/pagination/default.blade.php | 36 +++++ .../views/vendor/pagination/semantic-ui.blade.php | 36 +++++ .../vendor/pagination/simple-bootstrap-4.blade.php | 17 ++ .../vendor/pagination/simple-default.blade.php | 17 ++ 23 files changed, 1324 insertions(+) create mode 100644 resources/assets/js/app.js create mode 100644 resources/assets/js/bootstrap.js create mode 100644 resources/assets/js/components/ExampleComponent.vue create mode 100644 resources/assets/sass/_variables.scss create mode 100644 resources/assets/sass/app.scss create mode 100644 resources/lang/de/pagination.php create mode 100644 resources/lang/en/auth.php create mode 100644 resources/lang/en/pagination.php create mode 100644 resources/lang/en/passwords.php create mode 100644 resources/lang/en/validation.php create mode 100644 resources/views/index.blade.php create mode 100644 resources/views/layouts/base.blade.php create mode 100644 resources/views/offer.blade.php create mode 100644 resources/views/paginate.blade.php create mode 100644 resources/views/search.blade.php create mode 100644 resources/views/snippets/footer.blade.php create mode 100644 resources/views/snippets/navbar.blade.php create mode 100644 resources/views/snippets/sortbuttons.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/default.blade.php create mode 100644 resources/views/vendor/pagination/semantic-ui.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/simple-default.blade.php (limited to 'resources') diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js new file mode 100644 index 0000000..98eca79 --- /dev/null +++ b/resources/assets/js/app.js @@ -0,0 +1,22 @@ + +/** + * First we will load all of this project's JavaScript dependencies which + * includes Vue and other libraries. It is a great starting point when + * building robust, powerful web applications using Vue and Laravel. + */ + +require('./bootstrap'); + +window.Vue = require('vue'); + +/** + * Next, we will create a fresh Vue application instance and attach it to + * the page. Then, you may begin adding components to this application + * or customize the JavaScript scaffolding to fit your unique needs. + */ + +Vue.component('example-component', require('./components/ExampleComponent.vue')); + +const app = new Vue({ + el: '#app' +}); diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js new file mode 100644 index 0000000..fb0f1ed --- /dev/null +++ b/resources/assets/js/bootstrap.js @@ -0,0 +1,56 @@ + +window._ = require('lodash'); +window.Popper = require('popper.js').default; + +/** + * We'll load jQuery and the Bootstrap jQuery plugin which provides support + * for JavaScript based Bootstrap features such as modals and tabs. This + * code may be modified to fit the specific needs of your application. + */ + +try { + window.$ = window.jQuery = require('jquery'); + + require('bootstrap'); +} catch (e) {} + +/** + * 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'; + +/** + * Next we will register the CSRF Token as a common header with Axios so that + * all outgoing HTTP requests automatically have it attached. This is just + * a simple convenience so we don't have to attach every token manually. + */ + +let token = document.head.querySelector('meta[name="csrf-token"]'); + +if (token) { + window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; +} else { + console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); +} + +/** + * 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, +// encrypted: true +// }); diff --git a/resources/assets/js/components/ExampleComponent.vue b/resources/assets/js/components/ExampleComponent.vue new file mode 100644 index 0000000..2805329 --- /dev/null +++ b/resources/assets/js/components/ExampleComponent.vue @@ -0,0 +1,23 @@ + + + diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss new file mode 100644 index 0000000..1c44aff --- /dev/null +++ b/resources/assets/sass/_variables.scss @@ -0,0 +1,18 @@ + +// Body +$body-bg: #f5f8fa; + +// Typography +$font-family-sans-serif: "Raleway", sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; +$text-color: #636b6f; + +// Navbar +$navbar-default-bg: #fff; + +// Buttons +$btn-default-color: $text-color; + +// Panels +$panel-default-heading-bg: #fff; diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss new file mode 100644 index 0000000..0077cb1 --- /dev/null +++ b/resources/assets/sass/app.scss @@ -0,0 +1,14 @@ + +// Fonts +@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600"); + +// Variables +@import "variables"; + +// Bootstrap +@import '~bootstrap/scss/bootstrap'; + +.navbar-laravel { + background-color: #fff; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04); +} diff --git a/resources/lang/de/pagination.php b/resources/lang/de/pagination.php new file mode 100644 index 0000000..ad55d91 --- /dev/null +++ b/resources/lang/de/pagination.php @@ -0,0 +1,20 @@ + '« Vorherige', + 'next' => 'Nächste »', + 'start' => 'Anfang', + +]; diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100644 index 0000000..e5506df --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,19 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100644 index 0000000..e5544d2 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Passwords must be at least six characters and match the confirmation.', + 'reset' => 'Your password has been reset!', + 'sent' => 'We have e-mailed your password reset link!', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that e-mail address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100644 index 0000000..edc036d --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,121 @@ + 'The :attribute must be accepted.', + '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 may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may 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.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + '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.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + '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.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may 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.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be 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 is 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.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | 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 attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php new file mode 100644 index 0000000..7149031 --- /dev/null +++ b/resources/views/index.blade.php @@ -0,0 +1,162 @@ +@extends('layouts.base') + +@section('header') +Angebote +@endsection + +@section('content') +
+
+ +
+ +
+ + + +
+

Keine Angebote

+ Momentan liegen keine Angebote vor. Probieren Sie es später noch einmal. +
+spirit_type == "RSS-Feeds") { + #$offer->angebotsname = "dem " . $offer->angebotsname; + } else if ( !in_array(strtolower($offer->spirit_type), $views) ) { + $offer->url = "misc"; + $offer->angebotsname = "weiteren Angeboten"; + $offer->linktext = "Weitere günstige Angebote entdecken und bis zu " . $offer->procent . "% sparen."; + $offer->spirit_type = "Verschiedenes"; + } else { + $offer->url = lcfirst($offer->url) ; + $offer->angebotsname = "den " . $offer->angebotsname . "-Angeboten"; + $offer->linktext = "Finde den günstigsten ". $offer->spirit_type ." und spare bis zu " . $offer->procent . "%."; + } + + if ( $count % 2 == 0) { +?> +
+spirit_type ) { + +?> +
+
+
+
+
+

+ + {{ ucfirst($offer->spirit_type) }} {{ $offer->name}} + +

+
+
+

{{ $offer->procent}} %

+
+ + + +
+ + +
+
+
+ + +
+ +
+ + +

Was passiert hier?

+

+Auf dieser Webseite kuratiere ich die aktuellen Sonderangebote der wichtigsten Spirituosenhändler. Neue Angebote werden automatisch erkannt und hinzugefügt; nicht mehr gültige Angebote werden entfernt. +

+

Wie häufig werden die Angebote aktualisiert?

+

+Mehrmals täglich. +

+

Gibt es Push-Nachrichten?

+

+Noch nicht. Momentan ist die einzige Möglichkeit den Angeboten via RSS-Feed zu folgen. Mitteilungen per Push, E-Mail oder Twitter sind jedoch geplant. +

+ +
+@endsection + + +@section('scripts') + +@endsection diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php new file mode 100644 index 0000000..b7a7dd8 --- /dev/null +++ b/resources/views/layouts/base.blade.php @@ -0,0 +1,91 @@ + + + + + + + + + + + @yield('header') | {{ env("APP_BRANDING") }} + + + + + + + + + + + + + + + + + + + + + + + @yield('feed') + @yield('css') + + + + + + + + + + + + + @include('snippets.navbar') + + @yield('content') + + @include('snippets.footer') + + + + + + + + @yield('scripts') + + diff --git a/resources/views/offer.blade.php b/resources/views/offer.blade.php new file mode 100644 index 0000000..636f4ce --- /dev/null +++ b/resources/views/offer.blade.php @@ -0,0 +1,167 @@ +@extends('layouts.base') + +@section('header') +{{ ucwords($title) }} +@endsection + +@section('feed') + {!! Feed::link(secure_url($rss_feed) . "/", 'atom', 'Feed von ' . ucwords($spirit_type) . '-Angeboten', 'de') !!} +@endsection + +@section('content') +
+ +
+ +
+ +
+ + + + {{ $data->appends(Input::except('page'))->links('paginate') }} + +count() ) { + /* Keine Angebote */ +?> +
+

Keine Angebote

+ Momentan liegen keine {{ $title }} vor. Probieren Sie es später noch einmal. +
+ + + + + + +
+
+
+
+

+ + {{ ucwords($offer->spirit_type) }} {{ $offer->shop }} + +

+
+
+

{{ $offer->procent}} %

+
+ +
+
+
+

+ {{ ucwords($offer->spirit_type) }} {{ $offer->shop }} +

+
+
+ +

{{ $offer->name }}

+ +
+ +

+ Neuer Preis: {{ TF::fF($offer->discounted_price) }} € +
+ statt {{ TF::fF($offer->original_price) }} € +
+ {{ TF::fF($offer->base_price ) }} € / Liter +

+
+

+ Alkohol: {{ TF::fF($offer->abv) }} % +
+ Volumen: {{ TF::fF($offer->volume) }} Liter +
+ Versand: {{ TF::fF($offer->shipping_costs) }} € +
+
+

+
+
+ +
+ +
+
+ + + + {{ $data->appends(Input::except('page'))->links('paginate') }} + + + + +
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/paginate.blade.php b/resources/views/paginate.blade.php new file mode 100644 index 0000000..1697097 --- /dev/null +++ b/resources/views/paginate.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/search.blade.php b/resources/views/search.blade.php new file mode 100644 index 0000000..2f381d7 --- /dev/null +++ b/resources/views/search.blade.php @@ -0,0 +1,175 @@ +@extends('layouts.base') + +@section('header') +Finde den besten Deal +@endsection + +@section('feed') + {!! Feed::link(secure_url($rss_feed), 'atom', 'Feed von ' . $search_phrase , 'de') !!} +@endsection + +@section('content') +
+ +
+ +
+ + + + {{ $data->appends(Input::except('page'))->links('paginate') }} + +count() ) { + /* Keine Angebote */ +?> + + + + + + +
+
+
+
+

+ + {{ ucwords($offer->spirit_type) }} {{ $offer->shop }} + +

+
+
+

{{ $offer->procent}} %

+
+ +
+
+
+

+ {{ ucwords($offer->spirit_type) }} {{ $offer->shop }} +

+
+
+ +

{{ $offer->name }}

+ +
+

+ Neuer Preis: {{ TF::fF($offer->discounted_price) }} € +
+ statt {{ TF::fF($offer->original_price) }} € +
+ {{ TF::fF($offer->base_price ) }} € / Liter +

+

+ Alkohol: {{ TF::fF($offer->abv) }} % +
+ Volumen: {{ TF::fF($offer->volume) }} Liter +
+ Versand: {{ TF::fF($offer->shipping_costs) }} € +
+
+

+
+
+ +
+ +
+
+ + + + {{ $data->appends(Input::except('page'))->links('paginate') }} + + + + +
+ +@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/snippets/footer.blade.php b/resources/views/snippets/footer.blade.php new file mode 100644 index 0000000..a870301 --- /dev/null +++ b/resources/views/snippets/footer.blade.php @@ -0,0 +1,47 @@ + + + + +arrow_upward + diff --git a/resources/views/snippets/navbar.blade.php b/resources/views/snippets/navbar.blade.php new file mode 100644 index 0000000..26e2963 --- /dev/null +++ b/resources/views/snippets/navbar.blade.php @@ -0,0 +1,61 @@ +
+ + + + + +
+
+
+
+
+

+

Finde den besten Deal in Sachen Spirituosen

+
+
+ + +
+
+
+
diff --git a/resources/views/snippets/sortbuttons.blade.php b/resources/views/snippets/sortbuttons.blade.php new file mode 100644 index 0000000..71ea1e5 --- /dev/null +++ b/resources/views/snippets/sortbuttons.blade.php @@ -0,0 +1,109 @@ + +

+ + + + +

+ +
+

Sortieren nach: {{ $filter . " (" . $order . ")" }}

+ + +
diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..3f98455 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..4e795ff --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..c6e0d21 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..a9a18d3 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,17 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..1801609 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,17 @@ +@if ($paginator->hasPages()) + +@endif -- cgit v1.2.3