diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24b1163 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +workspace.code-workspace +.vscode +auth.json diff --git a/README.md b/README.md index 7212774..1d100fd 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,5 @@ -# Chandleur 2024 +# Default Theme +## ! Ce projet ne doit pas être monté directement dans GGW - -## Getting started - -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: - -``` -cd existing_repo -git remote add origin https://lab.s-web.fr/ldc-web/projets/gen-game-web-themes/regalette/chandleur/chandleur-2024.git -git branch -M main -git push -uf origin main -``` - -## Integrate with your tools - -- [ ] [Set up project integrations](https://lab.s-web.fr/ldc-web/projets/gen-game-web-themes/regalette/chandleur/chandleur-2024/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. +## Theme par défaut de Gen Game Web diff --git a/assets/fonts/Raleway/Raleway-Bold.ttf b/assets/fonts/Raleway/Raleway-Bold.ttf new file mode 100644 index 0000000..2ceaf63 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Bold.ttf differ diff --git a/assets/fonts/Raleway/Raleway-ExtraBold.ttf b/assets/fonts/Raleway/Raleway-ExtraBold.ttf new file mode 100644 index 0000000..308e5c1 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-ExtraBold.ttf differ diff --git a/assets/fonts/Raleway/Raleway-ExtraLight.ttf b/assets/fonts/Raleway/Raleway-ExtraLight.ttf new file mode 100644 index 0000000..281a001 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-ExtraLight.ttf differ diff --git a/assets/fonts/Raleway/Raleway-Heavy.ttf b/assets/fonts/Raleway/Raleway-Heavy.ttf new file mode 100644 index 0000000..8474318 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Heavy.ttf differ diff --git a/assets/fonts/Raleway/Raleway-Light.ttf b/assets/fonts/Raleway/Raleway-Light.ttf new file mode 100644 index 0000000..8b1d260 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Light.ttf differ diff --git a/assets/fonts/Raleway/Raleway-Medium.ttf b/assets/fonts/Raleway/Raleway-Medium.ttf new file mode 100644 index 0000000..127cdaa Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Medium.ttf differ diff --git a/assets/fonts/Raleway/Raleway-Regular.ttf b/assets/fonts/Raleway/Raleway-Regular.ttf new file mode 100644 index 0000000..252cad1 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Regular.ttf differ diff --git a/assets/fonts/Raleway/Raleway-SemiBold.ttf b/assets/fonts/Raleway/Raleway-SemiBold.ttf new file mode 100644 index 0000000..64b54a7 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-SemiBold.ttf differ diff --git a/assets/fonts/Raleway/Raleway-Thin.ttf b/assets/fonts/Raleway/Raleway-Thin.ttf new file mode 100644 index 0000000..26d16e4 Binary files /dev/null and b/assets/fonts/Raleway/Raleway-Thin.ttf differ diff --git a/assets/images/animations/br-spin.png b/assets/images/animations/br-spin.png new file mode 100644 index 0000000..eaabde3 Binary files /dev/null and b/assets/images/animations/br-spin.png differ diff --git a/assets/images/animations/wb-famille-spin.png b/assets/images/animations/wb-famille-spin.png new file mode 100644 index 0000000..ea1d1cc Binary files /dev/null and b/assets/images/animations/wb-famille-spin.png differ diff --git a/assets/images/animations/wb-happy-spin.png b/assets/images/animations/wb-happy-spin.png new file mode 100644 index 0000000..82ae06b Binary files /dev/null and b/assets/images/animations/wb-happy-spin.png differ diff --git a/assets/images/arrow-code.png b/assets/images/arrow-code.png new file mode 100644 index 0000000..3e23377 Binary files /dev/null and b/assets/images/arrow-code.png differ diff --git a/assets/images/arrow.png b/assets/images/arrow.png new file mode 100644 index 0000000..1fcfc27 Binary files /dev/null and b/assets/images/arrow.png differ diff --git a/assets/images/bg-tortoise-green.jpg b/assets/images/bg-tortoise-green.jpg new file mode 100644 index 0000000..f725793 Binary files /dev/null and b/assets/images/bg-tortoise-green.jpg differ diff --git a/assets/images/br-1-euro.png b/assets/images/br-1-euro.png new file mode 100644 index 0000000..a38e1a8 Binary files /dev/null and b/assets/images/br-1-euro.png differ diff --git a/assets/images/br.png b/assets/images/br.png new file mode 100644 index 0000000..cfe0d48 Binary files /dev/null and b/assets/images/br.png differ diff --git a/assets/images/connect.png b/assets/images/connect.png new file mode 100644 index 0000000..f98264d Binary files /dev/null and b/assets/images/connect.png differ diff --git a/assets/images/deco-slider.png b/assets/images/deco-slider.png new file mode 100644 index 0000000..970b4c7 Binary files /dev/null and b/assets/images/deco-slider.png differ diff --git a/assets/images/facebook.svg b/assets/images/facebook.svg new file mode 100644 index 0000000..ad9c79d --- /dev/null +++ b/assets/images/facebook.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/frise-beige.png b/assets/images/frise-beige.png new file mode 100644 index 0000000..ac512f7 Binary files /dev/null and b/assets/images/frise-beige.png differ diff --git a/assets/images/grattage.png b/assets/images/grattage.png new file mode 100644 index 0000000..eb95390 Binary files /dev/null and b/assets/images/grattage.png differ diff --git a/assets/images/home_logo.png b/assets/images/home_logo.png new file mode 100644 index 0000000..359913d Binary files /dev/null and b/assets/images/home_logo.png differ diff --git a/assets/images/how-to-play.png b/assets/images/how-to-play.png new file mode 100644 index 0000000..2e44635 Binary files /dev/null and b/assets/images/how-to-play.png differ diff --git a/assets/images/instagram.svg b/assets/images/instagram.svg new file mode 100644 index 0000000..dc5338c --- /dev/null +++ b/assets/images/instagram.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/large_br.png b/assets/images/large_br.png new file mode 100644 index 0000000..17ab5c9 Binary files /dev/null and b/assets/images/large_br.png differ diff --git a/assets/images/logo-br.png b/assets/images/logo-br.png new file mode 100644 index 0000000..cfe0d48 Binary files /dev/null and b/assets/images/logo-br.png differ diff --git a/assets/images/logo-footer.png b/assets/images/logo-footer.png new file mode 100644 index 0000000..de62d62 Binary files /dev/null and b/assets/images/logo-footer.png differ diff --git a/assets/images/logo-gauloisirs.png b/assets/images/logo-gauloisirs.png new file mode 100644 index 0000000..53e0296 Binary files /dev/null and b/assets/images/logo-gauloisirs.png differ diff --git a/assets/images/logo-kart.png b/assets/images/logo-kart.png new file mode 100644 index 0000000..a8f1f1e Binary files /dev/null and b/assets/images/logo-kart.png differ diff --git a/assets/images/logo-tv.png b/assets/images/logo-tv.png new file mode 100644 index 0000000..65bb9cb Binary files /dev/null and b/assets/images/logo-tv.png differ diff --git a/assets/images/pastille.png b/assets/images/pastille.png new file mode 100644 index 0000000..f368165 Binary files /dev/null and b/assets/images/pastille.png differ diff --git a/assets/images/photo-canoe.png b/assets/images/photo-canoe.png new file mode 100644 index 0000000..9612941 Binary files /dev/null and b/assets/images/photo-canoe.png differ diff --git a/assets/images/view-br.jpg b/assets/images/view-br.jpg new file mode 100644 index 0000000..b4858e5 Binary files /dev/null and b/assets/images/view-br.jpg differ diff --git a/favicon/android-chrome-192x192.png b/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..e84712f Binary files /dev/null and b/favicon/android-chrome-192x192.png differ diff --git a/favicon/android-chrome-512x512.png b/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..12f369a Binary files /dev/null and b/favicon/android-chrome-512x512.png differ diff --git a/favicon/apple-touch-icon.png b/favicon/apple-touch-icon.png new file mode 100644 index 0000000..c2f7301 Binary files /dev/null and b/favicon/apple-touch-icon.png differ diff --git a/favicon/browserconfig.xml b/favicon/browserconfig.xml new file mode 100644 index 0000000..f9c2e67 --- /dev/null +++ b/favicon/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #2b5797 + + + diff --git a/favicon/favicon-16x16.png b/favicon/favicon-16x16.png new file mode 100644 index 0000000..cb0de06 Binary files /dev/null and b/favicon/favicon-16x16.png differ diff --git a/favicon/favicon-32x32.png b/favicon/favicon-32x32.png new file mode 100644 index 0000000..586b050 Binary files /dev/null and b/favicon/favicon-32x32.png differ diff --git a/favicon/favicon.ico b/favicon/favicon.ico new file mode 100644 index 0000000..1650a77 Binary files /dev/null and b/favicon/favicon.ico differ diff --git a/favicon/mstile-150x150.png b/favicon/mstile-150x150.png new file mode 100644 index 0000000..e897e87 Binary files /dev/null and b/favicon/mstile-150x150.png differ diff --git a/favicon/safari-pinned-tab.svg b/favicon/safari-pinned-tab.svg new file mode 100644 index 0000000..f61f502 --- /dev/null +++ b/favicon/safari-pinned-tab.svg @@ -0,0 +1,109 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + + + + + + + + + diff --git a/favicon/site.webmanifest b/favicon/site.webmanifest new file mode 100644 index 0000000..b20abb7 --- /dev/null +++ b/favicon/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/sass/base/_bootstrap-overload.scss b/sass/base/_bootstrap-overload.scss new file mode 100644 index 0000000..1d02e16 --- /dev/null +++ b/sass/base/_bootstrap-overload.scss @@ -0,0 +1,4 @@ +.nav-link.active { + color: $primary; + font-weight: bold; +} diff --git a/sass/base/_common.scss b/sass/base/_common.scss new file mode 100644 index 0000000..2bd6dce --- /dev/null +++ b/sass/base/_common.scss @@ -0,0 +1 @@ +// Empty. diff --git a/sass/base/_fonts.scss b/sass/base/_fonts.scss new file mode 100644 index 0000000..2bd6dce --- /dev/null +++ b/sass/base/_fonts.scss @@ -0,0 +1 @@ +// Empty. diff --git a/sass/base/_layout.scss b/sass/base/_layout.scss new file mode 100644 index 0000000..2203d92 --- /dev/null +++ b/sass/base/_layout.scss @@ -0,0 +1,117 @@ +@use "sass:map"; + +body { + > header { + @include media-breakpoint-up(xl) { + .rest-in-game-banner-container { + overflow: hidden; + } + } + + @include media-breakpoint-up(xxxl, map.merge($grid-breakpoints, ("xxxl": 1600px))) { + .game-logo-banner { + position: absolute; + top: 0; + } + } + + + .rest-in-game-banner { + transform: skew(12deg) translateX(5%); + + >span { + transform: skew(-12deg); + } + } + + .btn-connect { + position: relative; + padding-left: 2.3rem; + + &::before { + position: absolute; + top: 50%; + left: 0.3rem; + width: 1.5rem; + height: 1.5rem; + background-image: url('@Theme/images/connect.png'); + background-size: contain; + content: ""; + transform: translateY(-50%); + } + } + } + + > footer { + .share { + width: 1.6rem; + } + + .list-inline { + .list-inline-item { + &::after { + right: 0; + display: inline-block; + width: 0.2rem; + margin-left: 0.8rem; + background-color: $color-light; + content: '\00A0'; + } + + &:last-child::after { + display: none; + } + } + } + + svg { + fill: $color-light; + } + + .downlink { + > a { + display: inline-block; + } + } + + @include media-breakpoint-up(md) { + .downlink { + position: relative; + height: 6rem; + + > a { + position: absolute; + top: -3rem; + left: 50%; + width: 11rem; + max-height: 8rem; + transform: translateX(-50%); + + > span { + position: relative; + top: -3rem; + } + } + } + } + + #page-up { + position: fixed; + right: 0; + bottom: 0; + display: none; + padding: 0; + margin-right: 1rem; + + &.show { + display: block; + } + + svg { + width: 3rem; + fill: $color-dark; + filter: drop-shadow(0 0 2px #{rgba($color-light, $alpha: 0.4)}); + } + } + } +} diff --git a/sass/fo.scss b/sass/fo.scss new file mode 100644 index 0000000..cd7cdff --- /dev/null +++ b/sass/fo.scss @@ -0,0 +1,23 @@ +@charset "UTF-8"; + +// * UTILITIES +@import "./utilities/variables"; + +// * VENDOR +@import "@ldc-web/cookie-notice"; +@import "glightbox/dist/css/glightbox.css"; +@import "./vendor/bootstrap"; + +// * BASE +@import "./base/bootstrap-overload"; +@import "./base/fonts"; +@import "./base/common"; +@import "./base/layout"; + +// * PAGES +@import "./pages/teaser"; +@import "./pages/home"; +@import "./pages/static_page"; +@import "./pages/products"; +@import "./pages/won"; +@import "./pages/participate"; diff --git a/sass/mail-theme.scss b/sass/mail-theme.scss new file mode 100644 index 0000000..6adfa17 --- /dev/null +++ b/sass/mail-theme.scss @@ -0,0 +1,316 @@ +@use "sass:color"; +@import "utilities/variables"; + +// 1. Include new custom variables +@import "utilities/bootstrap-variables"; + +// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc) +// @import "bootstrap/scss/functions"; + +// 3. Include remainder of required Bootstrap stylesheets +@import "bootstrap/scss/variables"; + +// * Laravel mail vendor + +/* Base */ + +body, +body *:not(html, style, br, tr, code) { + position: relative; + box-sizing: border-box; + font-family: + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Helvetica, + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol"; +} + +body { + width: 100% !important; + height: 100%; + padding: 0; + margin: 0; + background-color: $body-bg; + color: $body-color; + line-height: 1.4; + text-size-adjust: none; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +img { + max-width: 100%; +} + +a { + color: $link-color; +} + +a img { + border: 0; +} + +/* Typography */ + +h1 { + margin-top: 0; + color: $color-primary; + color: $color-tertiary; + font-size: 18px; + font-weight: bold; + text-align: left; +} + +h2 { + margin-top: 0; + color: $color-tertiary; + font-size: 16px; + font-weight: bold; + text-align: left; +} + +h3 { + margin-top: 0; + color: $color-tertiary; + font-size: 14px; + font-weight: bold; + text-align: left; +} + +p { + margin-top: 0; + font-size: 16px; + line-height: 1.5em; + text-align: left; +} + +.sub { + font-size: 12px; +} + +/* Layout */ + +.wrapper { + -premailer-width: 100%; + width: 100%; + padding: 0; + margin: 0; + background-color: $bg-lightened; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; +} + +.content { + -premailer-width: 100%; + width: 100%; + padding: 0; + margin: 0; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: $color-primary; + font-size: 19px; + font-weight: bold; + text-decoration: none; +} + +/* Logo */ + +.logo { + width: 75px; + height: 75px; + max-height: 75px; +} + +/* Body */ + +.body { + -premailer-width: 100%; + width: 100%; + padding: 0; + border-top: 1px solid #{$bg-lightened}; + border-bottom: 1px solid #{$bg-lightened}; + margin: 0; + background-color: $bg-lightened; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; +} + +.inner-body { + -premailer-width: 570px; + width: 570px; + padding: 0; + border-width: 1px; + border-color: color.scale($body-bg, $lightness: -30%); + border-radius: 2px; + margin: 0 auto; + background-color: $body-bg; + box-shadow: 0 2px 0 rgb(0 0 150 / 2.5%), 2px 4px 0 rgb(0 0 150 / 1.5%); + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; +} + +/* Subcopy */ + +.subcopy { + padding-top: 25px; + border-top: 1px solid color.scale($body-bg, $lightness: -30%); + margin-top: 25px; +} + +.subcopy p { + font-size: 14px; +} + +/* Footer */ + +.footer { + -premailer-width: 570px; + width: 570px; + padding: 0; + margin: 0 auto; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + text-align: center; +} + +.footer p { + color: #b0adc5; + font-size: 12px; + text-align: center; +} + +.footer a { + color: #b0adc5; + text-decoration: underline; +} + +/* Tables */ + +.table table { + -premailer-width: 100%; + width: 100%; + margin: 30px auto; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; +} + +.table th { + padding-bottom: 8px; + border-bottom: 1px solid #edeff2; + margin: 0; +} + +.table td { + padding: 10px 0; + margin: 0; + color: #74787e; + font-size: 15px; + line-height: 18px; +} + +.content-cell { + max-width: 100vw; + padding: 32px; +} + +/* Buttons */ + +.action { + -premailer-width: 100%; + width: 100%; + padding: 0; + margin: 30px auto; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + text-align: center; +} + +.button { + display: inline-block; + overflow: hidden; + border-radius: 4px; + color: $body-bg; + text-decoration: none; + text-size-adjust: none; +} + +.button-blue, +.button-primary { + border-top: 8px solid #{$color-primary}; + border-right: 18px solid #{$color-primary}; + border-bottom: 8px solid #{$color-primary}; + border-left: 18px solid #{$color-primary}; + background-color: #{$color-primary}; +} + +.button-green, +.button-success { + border-top: 8px solid #{$color-success}; + border-right: 18px solid #{$color-success}; + border-bottom: 8px solid #{$color-success}; + border-left: 18px solid #{$color-success}; + background-color: #{$color-success}; +} + +.button-red, +.button-error { + border-top: 8px solid #{$color-danger}; + border-right: 18px solid #{$color-danger}; + border-bottom: 8px solid #{$color-danger}; + border-left: 18px solid #{$color-danger}; + background-color: #{$color-danger}; +} + +/* Panels */ + +.panel { + border-left: $color-primary solid 4px; + margin: 21px 0; +} + +.panel-content { + padding: 16px; + background-color: $bg-lightened; + color: $body-color; +} + +.panel-content p { + color: $body-color; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + padding-bottom: 0; + margin-bottom: 0; +} + +/* Utilities */ + +.break-all { + word-break: break-all; +} diff --git a/sass/pages/_home.scss b/sass/pages/_home.scss new file mode 100644 index 0000000..b0278e0 --- /dev/null +++ b/sass/pages/_home.scss @@ -0,0 +1,87 @@ +.home-page { + .picture-100-win { + left: 40%; + transform: translateX(-60%); + } + + @include media-breakpoint-up(xl) { + .main-rotate { + transform: rotateZ(-5deg); + } + + .anti-rotate { + transform: rotateZ(5deg); + } + } + + .badge-vertical { + width: 4rem; + padding: 0.8rem; + + @include media-breakpoint-up(md) { + width: 7rem; + padding: 1.3rem; + } + + &::after { + display: block; + width: 0.4rem; + height: 200%; + margin: 0 auto; + background-color: $color-white; + content: ' '; + } + + &:last-child::after { + display: none; + } + } + + .picture-products { + max-width: 20rem; + } + + #carousel-lots { + .carousel-text-pannel { + max-width: 40rem; + } + + .carousel-item { + min-height: 55rem; + + @include media-breakpoint-up(sm) { + min-height: 48rem; + } + + @include media-breakpoint-up(md) { + min-height: 40rem; + } + } + + img { + max-height: 20rem; + + @include media-breakpoint-up(md) { + max-height: inherit; + } + } + + .main-rotate { + transform: rotateZ(-1deg); + } + + .anti-rotate { + transform: rotateZ(1deg); + } + + @include media-breakpoint-up(md) { + .main-rotate { + transform: rotateZ(-5deg); + } + + .anti-rotate { + transform: rotateZ(5deg); + } + } + } +} diff --git a/sass/pages/_participate.scss b/sass/pages/_participate.scss new file mode 100644 index 0000000..883508c --- /dev/null +++ b/sass/pages/_participate.scss @@ -0,0 +1,23 @@ +.participate-page { + .br-and-arrow { + position: relative; + text-align: center; + + img { + width: 9rem; + } + + &::after { + position: relative; + display: inline-block; + width: 3rem; + height: 4rem; + background-image: url('@Theme/images/arrow-code.png'); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ' '; + transform: translateY(100%); + } + } +} diff --git a/sass/pages/_products.scss b/sass/pages/_products.scss new file mode 100644 index 0000000..04351b1 --- /dev/null +++ b/sass/pages/_products.scss @@ -0,0 +1,15 @@ +.product-page { + .product-list { + .product { + width: 16rem; + + @include media-breakpoint-up(sm) { + width: 13rem; + } + + @include media-breakpoint-up(lg) { + width: 12rem; + } + } + } +} diff --git a/sass/pages/_static_page.scss b/sass/pages/_static_page.scss new file mode 100644 index 0000000..8baf53b --- /dev/null +++ b/sass/pages/_static_page.scss @@ -0,0 +1,18 @@ +.static-page { + h1 { + color: $color-quint; + text-align: center; + text-transform: uppercase; + } + + h2,h3,h4,h5,h6 { + color: $color-quad; + text-transform: uppercase; + } + + hr { + width: 30%; + border-top: 0.2rem solid #{$color-quad}; + margin: 0 auto; + } +} \ No newline at end of file diff --git a/sass/pages/_teaser.scss b/sass/pages/_teaser.scss new file mode 100644 index 0000000..59e7251 --- /dev/null +++ b/sass/pages/_teaser.scss @@ -0,0 +1,20 @@ +.teaser-page { + .container-big { + max-width: 1500px; + } + + .picture-100-win { + left: 40%; + transform: translateX(-60%); + } + + @include media-breakpoint-up(xl) { + .main-rotate { + transform: rotateZ(-5deg); + } + + .anti-rotate { + transform: rotateZ(5deg); + } + } +} diff --git a/sass/pages/_won.scss b/sass/pages/_won.scss new file mode 100644 index 0000000..d7e27e0 --- /dev/null +++ b/sass/pages/_won.scss @@ -0,0 +1,27 @@ +@import "./../partials/spin_wheel"; + +.won-page { + #wheel-wrapper { + position: relative; + width: 16rem; + margin: 0 auto; + } + + @include media-breakpoint-up(md) { + .prize-rotate { + transform: rotateZ(-3deg); + } + + .anti-rotate { + transform: rotateZ(3deg); + } + } + + .wide-banner { + position: relative; + + @include media-breakpoint-up(md) { + right: -2rem; + } + } +} diff --git a/sass/partials/_spin_wheel.scss b/sass/partials/_spin_wheel.scss new file mode 100644 index 0000000..7bad90e --- /dev/null +++ b/sass/partials/_spin_wheel.scss @@ -0,0 +1,168 @@ +#wheel-wrapper { + * { + padding: 0; + margin: 0; + } + + .wheel { + position: relative; + overflow: hidden; + width: 16rem; + height: 16rem; + border: 0.4rem solid #{$color-white}; + border-radius: 50%; + margin: 0; + box-shadow: rgb(0 0 0 / 20%) 0 0 10px, rgb(0 0 0 / 5%) 0 3px 0; + transform: rotate(0deg); + + &::before { + position: absolute; + z-index: 1000; + left: 0; + width: calc(16rem - 0.2rem * 2); + height: calc(16rem - 0.2rem * 2); + border: 0.2rem solid rgb(0 0 0 / 10%); + border-radius: 50%; + content: ""; + } + + .wheel-inner { + width: 100%; + height: 100%; + transition: all 6s cubic-bezier(0, 0.99, 0.44, 0.99); + } + + .wheel-sec { + position: absolute; + top: -.1rem; + left: -.1rem; + width: 16rem; + height: calc(16rem / 2); + background-origin: border-box; + background-position: center; + background-repeat: no-repeat; + background-size: auto; + opacity: 1; + transform-origin: calc(16rem / 2) calc(16rem / 2); + } + + .wheel-spin { + position: absolute; + z-index: 1000; + top: 50%; + left: 50%; + width: 4.2rem; + height: 4.2rem; + border-radius: 50%; + margin: -34px 0 0 -34px; + background: #{$color-white}; + box-shadow: rgb(0 0 0 / 10%) 0 3px 0; + cursor: pointer; + font-family: "Exo 2", sans-serif; + user-select: none; + + &::before { + position: absolute; + top: -12px; + left: 14px; + width: 0; + height: 0; + border-width: 0 20px 28px; + border-style: solid; + border-color: transparent transparent #{$color-white}; + content: ""; + } + + &::after { + position: relative; + z-index: 100000; + display: block; + width: 4.2rem; + height: 4.2rem; + color: $color-dark; + content: "LANCER"; + font-size: .7rem; + line-height: 4.2rem; + text-align: center; + text-shadow: 0 2px 0 #{$color-white}, 0 -1px 0 rgb(0 0 0 / 30%); + } + + .wheel-spin-inner { + position: absolute; + z-index: 999; + top: 50%; + left: 50%; + width: 54px; + height: 54px; + border-radius: 50%; + margin: -27px 0 0 -27px; + background: $color-white; + + /* Old browsers */ + /* stylelint-disable-next-line declaration-property-value-no-unknown */ + background: radial-gradient(center, ellipse cover, rgb(255 255 255 / 100%) 0%, rgb(234 234 234 / 100%) 100% ); /* FF3.6+ */ + background: -webkit-gradient(radial, center center, 0, center center, 100%, color-stop(0%, rgb(255 255 255 / 100%)), color-stop(100%, rgb(234 234 234 / 100%)) ); /* Chrome,Safari4+ */ + /* stylelint-disable-next-line declaration-property-value-no-unknown */ + background: radial-gradient(center, ellipse cover, rgb(255 255 255 / 100%) 0%, rgb(234 234 234 / 100%) 100% ); /* Chrome10+,Safari5.1+ */ + /* stylelint-disable-next-line declaration-property-value-no-unknown */ + background: radial-gradient(center, ellipse cover, rgb(255 255 255 / 100%) 0%, rgb(234 234 234 / 100%) 100% ); /* Opera 12+ */ + /* stylelint-disable-next-line declaration-property-value-no-unknown */ + background: radial-gradient(center, ellipse cover, rgb(255 255 255 / 100%) 0%, rgb(234 234 234 / 100%) 100% ); /* IE10+ */ + background: radial-gradient(ellipse at center, rgb(255 255 255 / 100%) 0%, rgb(234 234 234 / 100%) 100% ); /* W3C */ + box-shadow: rgb(255 255 255 / 100%) 0 -2px 0 inset, rgb(255 255 255 / 100%) 0 2px 0 inset, rgb(0 0 0 / 40%) 0 0 5px; + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eaeaea',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ + } + + &:active,&.active { + &::after { + font-size: .8rem; + } + + .wheel-spin-inner { + box-shadow: rgb(0 0 0 / 40%) 0 0 5px inset; + } + } + } + + .wheel-shine { + position: absolute; + top: 0; + left: 0; + width: 16rem; + height: 16rem; /* FF3.6+ */ + background: -webkit-gradient(radial, center center, 0, center center, 100%, color-stop(0%, rgb(255 255 255 / 100%)), color-stop(1%, rgb(255 255 255 / 99%)), color-stop(9%, rgb(255 255 255 / 91%)), color-stop(100%, rgb(255 255 255 / 0%)) ); /* Chrome,Safari4+ */ /* Chrome10+,Safari5.1+ */ /* Opera 12+ */ + /* stylelint-disable-next-line declaration-property-value-no-unknown */ + background: radial-gradient(center, ellipse cover, rgb(255 255 255 / 100%) 0%, rgb(255 255 255 / 99%) 1%, rgb(255 255 255 / 91%) 9%, rgb(255 255 255 / 0%) 100% ); /* IE10+ */ + background: radial-gradient(ellipse at center, rgb(255 255 255 / 100%) 0%, rgb(255 255 255 / 99%) 1%, rgb(255 255 255 / 91%) 9%, rgb(255 255 255 / 0%) 100% ); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#00ffffff',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ + opacity: 0.1; + } + } + + /* ANIMATION */ + @keyframes hh { + 0%, + 100% { + transform: rotate(0deg); + } + + 50% { + transform: rotate(7deg); + } + } + + @keyframes hh { + 0%, + 100% { + transform: rotate(0deg); + } + + 50% { + transform: rotate(7deg); + } + } + + .spin { /* Chrome, Safari, Opera */ + animation: hh 0.1s; + } +} diff --git a/sass/utilities/_bootstrap-custom.scss b/sass/utilities/_bootstrap-custom.scss new file mode 100644 index 0000000..f50fbd5 --- /dev/null +++ b/sass/utilities/_bootstrap-custom.scss @@ -0,0 +1,46 @@ +@use "sass:list"; +@import "mixins"; +@import "bootstrap/scss/functions"; +@import "./bs-customs/input"; + +// SET SOME CLASSES WITH BOOTSTRAP BREAKPOINTS +// * Reponsive borders +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + @include generate-bs-borders($infix, $prefix); + + @each $color, $value in $theme-colors { + @include generate-bs-borders($infix, $prefix, $color); + } + } +} + +// * Responsive sizings (used in laravel errors layouts) +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + .w#{$infix}-25 { + width: 25% !important; + } + .w#{$infix}-50 { + width: 50% !important; + } + .w#{$infix}-75 { + width: 75% !important; + } + .w#{$infix}-100 { + width: 100% !important; + } + + @each $prop, $unit in (width: vw, height: vh) { + @each $size in [25, 50, 75, 100] { + .#{$unit}#{$infix}-#{$size} { + #{$prop}: #{$size}#{$unit} !important; + } + } + } + } +} diff --git a/sass/utilities/_bootstrap-variables.scss b/sass/utilities/_bootstrap-variables.scss new file mode 100644 index 0000000..6e7f846 --- /dev/null +++ b/sass/utilities/_bootstrap-variables.scss @@ -0,0 +1,62 @@ +@use "sass:map"; +@import 'bootstrap/scss/functions'; + +// Override bootstrap colors +$primary: $color-primary; +$secondary: $color-secondary; +$success: $color-success; +$info: $color-info; +$warning: $color-warning; +$danger: $color-danger; +$light: $color-light; +$white: $color-white; +$dark: $color-dark; +$tertiary: $color-tertiary; +$quad: $color-quad; +$quint: $color-quint; +$theme-colors: ( + primary: $primary, + secondary: $secondary, + tertiary: $tertiary, + quad: $quad, + quint: $quint, + success: $success, + info: $info, + warning: $warning, + danger: $danger, + light: $light, + "white": $white, + dark: $dark, +); +$custom-theme-colors: map.merge($theme-colors, +( + 'tertiary': $tertiary, + 'quad': $quad, + 'quint': $quint, +)); +$theme-colors: map.merge($theme-colors, $custom-theme-colors); +$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value'); + +// Override bootstrap vars +$font-family-base: $font-default-family-base; +$font-size-base: $font-default-size-base; +$line-height-base: $line-default-height-base; + +// Add font-size variable +$heading-multiplicator: 1; +$h1-font-size: $font-size-base * $heading-multiplicator * 2.5; +$h2-font-size: $font-size-base * $heading-multiplicator * 2; +$h3-font-size: $font-size-base * $heading-multiplicator * 1.75; +$h4-font-size: $font-size-base * $heading-multiplicator * 1.5; +$h5-font-size: $font-size-base * $heading-multiplicator * 1.25; +$h6-font-size: $font-size-base * $heading-multiplicator; + +// Add the new font-size in this map +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size, +); \ No newline at end of file diff --git a/sass/utilities/_mixins.scss b/sass/utilities/_mixins.scss new file mode 100644 index 0000000..b0fc0d1 --- /dev/null +++ b/sass/utilities/_mixins.scss @@ -0,0 +1,54 @@ +@mixin generate-bs-borders($infix, $prefix, $color:null) { + $color-var: var(--#{$prefix}border-color); + + @if $color { + $color-var: rgba(var(--#{$prefix}#{$color}-rgb)); + $color: "-#{$color}"; + } + + .border#{$infix}#{$color}-top { + border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-end { + border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-bottom { + border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-start { + border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } + + .border#{$infix}#{$color}-0 { border: 0 !important; } + .border#{$infix}#{$color}-top-0 { border-top: 0 !important; } + .border#{$infix}#{$color}-end-0 { border-right: 0 !important; } + .border#{$infix}#{$color}-bottom-0 { border-bottom: 0 !important; } + .border#{$infix}#{$color}-start-0 { border-left: 0 !important; } + + @each $idx, $b-width in $border-widths { + $pidx: list.index(($border-widths), ($idx $b-width)); + + .border#{$infix}#{$color}-top-#{$idx} { + border-top: $b-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-end-#{$idx} { + border-right: $b-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-bottom-#{$idx} { + border-bottom: $b-width var(--#{$prefix}border-style) #{$color-var} !important; + } + .border#{$infix}#{$color}-start-#{$idx} { + border-left: $b-width var(--#{$prefix}border-style) #{$color-var} !important; + } + } + + .border#{$infix}#{$color}-x { + border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } + + .border#{$infix}#{$color}-y { + border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; + } +} diff --git a/sass/utilities/_variables.scss b/sass/utilities/_variables.scss new file mode 100644 index 0000000..ed2d5ec --- /dev/null +++ b/sass/utilities/_variables.scss @@ -0,0 +1,41 @@ +@use "sass:color"; + +// * COLORS +$color-white: #fff; +$color-light: #eceff3; +$color-dark: #070000; +$color-success: #00ac61; +$color-danger: #f71200; +$color-info: #508fdf; +$color-warning: #e6cd00; +$color-primary: #0f437e; +$color-secondary: #135ba7; +$color-tertiary: #db275a; +$color-quad: #00719e; +$color-quint: #fba629; + +// * BACKGROUNDS COLORS +$bg-lightened: $color-light; +$bg-darkened: $color-dark; +$bg-action: $color-primary; + +// * FONTS COLORS +$color-default-titles: $color-primary; +$color-default-texts: $color-dark; + +// * FONTS +$font-default-family-base: "Imprima Regular", sans-serif; // - The default site font family. +$font-default-size-base: 1rem; // Assumes the browser default, typically `16px` +$line-default-height-base: 1.65; + + +// * Inputs + +$input-bg: color.adjust($color-tertiary, $lightness: 45%); +$input-color: color.adjust($color-tertiary, $lightness: -10%); + + +// * Cookie Notice +$ck-primary-color: $color-primary; +$ck-secondary-color: color.adjust($color-tertiary, $lightness: -10%); +$ck-background-color: $color-light; diff --git a/sass/utilities/bs-customs/_input.scss b/sass/utilities/bs-customs/_input.scss new file mode 100644 index 0000000..f2bb723 --- /dev/null +++ b/sass/utilities/bs-customs/_input.scss @@ -0,0 +1,32 @@ +@use "sass:color"; + +// * Input Form floating text +.form-floating { + > label { + color: #{color.adjust($color-tertiary, $lightness: -4%)}; + font-weight: bold; + } + + > .form-control, + > .form-control-plaintext { + &::placeholder { + color: transparent; + } + } + + > .form-control-plaintext, + > .form-control:focus, + > .form-control:not(:placeholder-shown), + > .form-select { + /* stylelint-disable-next-line no-descending-specificity */ + ~ label { + color: #{rgba(color.adjust($color-tertiary, $lightness: -4%), $form-floating-label-opacity)}; + } + } + // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped + // > .form-control:-webkit-autofill { + // ~ label { + // color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity}); + // } + // } +} diff --git a/sass/vendor/_bootstrap.scss b/sass/vendor/_bootstrap.scss new file mode 100644 index 0000000..9e883ab --- /dev/null +++ b/sass/vendor/_bootstrap.scss @@ -0,0 +1,47 @@ +// 1. Include new custom variables +@import "./../utilities/bootstrap-variables"; + +// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc) +@import "bootstrap/scss/functions"; + +// 3. Include remainder of required Bootstrap stylesheets +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/variables-dark"; + +// 4. Include remainder of required parts +@import "bootstrap/scss/maps"; +@import "bootstrap/scss/mixins"; +@import "bootstrap/scss/root"; + +// 5. Optionally include any other parts as needed +@import "bootstrap/scss/alert"; +@import "bootstrap/scss/buttons"; +@import "bootstrap/scss/button-group"; +@import "bootstrap/scss/containers"; +@import "bootstrap/scss/dropdown"; +@import "bootstrap/scss/forms"; +@import "bootstrap/scss/grid"; +@import "bootstrap/scss/helpers"; +@import "bootstrap/scss/images"; +@import "bootstrap/scss/list-group"; +@import "bootstrap/scss/nav"; +@import "bootstrap/scss/navbar"; +@import "bootstrap/scss/pagination"; +@import "bootstrap/scss/spinners"; +@import "bootstrap/scss/reboot"; +@import "bootstrap/scss/tables"; +@import "bootstrap/scss/tooltip"; +@import "bootstrap/scss/transitions"; +@import "bootstrap/scss/type"; +@import "bootstrap/scss/utilities"; +@import "bootstrap/scss/close"; +@import "bootstrap/scss/breadcrumb"; +@import "bootstrap/scss/carousel"; +@import "bootstrap/scss/card"; +@import "bootstrap/scss/accordion"; + +// 6. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss` +@import "bootstrap/scss/utilities/api"; + +// 7 Overload bootstrap classes +@import "./../utilities/bootstrap-custom"; diff --git a/theme.config.php b/theme.config.php new file mode 100644 index 0000000..fabf539 --- /dev/null +++ b/theme.config.php @@ -0,0 +1,72 @@ + '2.0.0', + // * Theme name + 'name' => 'base', + // * Picture BO validation sizes + 'models' => [ + 'prizes' => [ + 'picture_max_width' => 560, + 'picture_max_height' => 700, + ], + 'products' => [ + 'picture_max_width' => 550, + 'picture_max_height' => 550, + ], + 'ranges' => [ + 'picture_max_width' => 476, + 'picture_max_height' => 355, + ], + ], + // * Image resizer config + /** + * Format can specifiy to which format save the image + * JPEG PNG GIF TIF BMP ICO PSD WebP + * GD ✔️ ✔️ ✔️ - - - - ✔️ * + * Imagick ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ * + * For WebP support GD driver must be used with PHP 5 >= 5.5.0 or PHP 7 + * in order to use imagewebp(). If Imagick is used, it must be compiled + * with libwebp for WebP support. + * resize => will resize the image (boolean) + * fit => Combine cropping and resizing to format image in a smart way (boolean) + * keepRatio => will keep image ratio wile resizing (boolean) + * trim => boolean to trim the image using border color + * inCanvas => to make sure image boundarie is respected + * format => select tha wantd ouput form, yan can just convert images if you want + * example : + * 'small' => [ + * 'height' => 500, + * 'width' => 250, + * 'inCanvas' => true, + * 'trim' => ['transparent', null, 10] + * ], + * 'smallWebp' => [ + * 'height' => 500, + * 'width' => 250, + * 'inCanvas' => true, + * 'format' => 'webp' + * ], + * 'justconvertImage' => [ + * 'format' => 'webp' + * ] + */ + 'resizes' => [ + 'trimlot1' => [ + 'height' => 600, + 'width' => 400, + 'inCanvas' => true, + 'fit' => true, + 'format' => 'webp' + ], + 'trimlot2' => [ + 'height' => 400, + 'width' => 400, + 'fit' => true, + 'inCanvas' => true, + 'trim' => ['transparent', null, 10], + 'format' => 'png' + ] + ] +]; diff --git a/ts/base/common.ts b/ts/base/common.ts new file mode 100644 index 0000000..90ddad4 --- /dev/null +++ b/ts/base/common.ts @@ -0,0 +1,93 @@ +// * Video frames. +document.addEventListener("DOMContentLoaded", function () { + const videoFrameList = document.querySelectorAll( + ".video-frame" + ) as NodeListOf; + for (const videoLink of videoFrameList) { + if (!videoLink.dataset.type) { + throw new Error("Missing dataset type"); + } + if (!videoLink.dataset.frame) { + throw new Error("Missing dataset frame"); + } + // @ts-ignore + window.__CN_VIDEO = window.__CN_VIDEO ?? {}; + + const newIframe = document.createElement("iframe"); + newIframe.frameBorder = "0"; + newIframe.allow = "fullscreen"; + newIframe.width = "1920px"; + newIframe.height = "1080px"; + newIframe.setAttribute("allowfullscreen", "allowfullscreen"); + + // @ts-ignore + const instance = new FsLightbox(); + instance.props.sources = [newIframe]; + + setTimeout(() => { + videoLink.addEventListener("click", (e) => { + e.preventDefault(); + + // * This comes fslightbox lib + // @ts-ignore + instance.open(); + setTimeout(function () { + // @ts-ignore + newIframe.src = window.__CN_VIDEO[videoLink.dataset.type] + ? String(videoLink.href) + : String(videoLink.dataset.frame); + }, 50); + return false; + }); + }, 300); + } + + const scrollTop = (target: string, offset: number = 0) => { + const targetElement = document.getElementById(target); + if (!targetElement) throw new Error(`scrollTop requires ${target} to exist`); + const top = targetElement.getBoundingClientRect().top, + t = window.scrollY + top - offset; + scrollTo({ + top: t, + behavior: "smooth" + }); + }; + + const pageUp = document.getElementById("page-up"); + if (pageUp) { + pageUp.addEventListener("click", () => scrollTop("content-container", 250)), + document.addEventListener("scroll", () => { + if (window.scrollY > 250) { + pageUp.classList.add("show"); + return; + } + pageUp.classList.remove("show"); + }); + } +}); + +// * Input Validation. +document.addEventListener("DOMContentLoaded", function () { + document.querySelectorAll("input.is-invalid").forEach((input) => { + let timer: NodeJS.Timeout|null = null; + input.addEventListener("change", () => { + const parent = input.parentElement; + input.classList.remove("is-invalid"); + if (parent && parent.classList.contains("is-invalid")) { + parent.classList.remove("is-invalid"); + } + }); + input.addEventListener("input", () => { + if (timer) { + clearTimeout(timer); + } + timer = setTimeout(() => { + const parent = input.parentElement; + input.classList.remove("is-invalid"); + if (parent && parent.classList.contains("is-invalid")) { + parent.classList.remove("is-invalid"); + } + }, 250); + }); + }); +}); diff --git a/ts/components/InputBirthDate.vue b/ts/components/InputBirthDate.vue new file mode 100644 index 0000000..79dabee --- /dev/null +++ b/ts/components/InputBirthDate.vue @@ -0,0 +1,102 @@ + + + diff --git a/ts/components/PasswordVisibility.vue b/ts/components/PasswordVisibility.vue new file mode 100644 index 0000000..ab2f2cf --- /dev/null +++ b/ts/components/PasswordVisibility.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/ts/env.d.ts b/ts/env.d.ts new file mode 100644 index 0000000..a2ab964 --- /dev/null +++ b/ts/env.d.ts @@ -0,0 +1,8 @@ +/// + +declare module "*.vue" { + import type { DefineComponent } from "vue"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/ts/fo.ts b/ts/fo.ts new file mode 100644 index 0000000..1b50d30 --- /dev/null +++ b/ts/fo.ts @@ -0,0 +1,20 @@ +// ASSETS +/// +import.meta.glob(["./../assets/images/**"]); + +// UTILITIES +import "./utilities/bootstrap"; +import "./utilities/fontawesome"; +import "./utilities/vue-fo"; + +// CUSTOM +import "./base/common"; + +// PAGES +import "./pages/home"; +import "./pages/products"; +import "./pages/won"; + +// Cookies +import CookieNotice from "@ldc-web/cookie-notice"; +window.CookieNotice = CookieNotice; diff --git a/ts/index.d.ts b/ts/index.d.ts new file mode 100644 index 0000000..48020d5 --- /dev/null +++ b/ts/index.d.ts @@ -0,0 +1,12 @@ +export { }; + +import type CookieNotice from "@ldc-web/cookie-notice"; +import { AxiosStatic } from "axios"; + +declare global { + + interface Window { + CookieNotice: typeof CookieNotice; + axios: AxiosStatic; + } +} diff --git a/ts/modules/bsTooltips.ts b/ts/modules/bsTooltips.ts new file mode 100644 index 0000000..6467bcd --- /dev/null +++ b/ts/modules/bsTooltips.ts @@ -0,0 +1,26 @@ +import type * as bootstrap from "bootstrap"; + +let tooltips: Array = []; + +export default { + methods: { + initTooltips() { + // Disable tooltips on reboot. + tooltips.forEach((tooltip) => { + tooltip.disable(); + tooltip.hide(); + }); + tooltips = [].slice + .call(document.querySelectorAll("[data-bs-toggle=\"tooltip\"]")) + .map(function (tooltipTriggerEl) { + return new window.bootstrap.Tooltip(tooltipTriggerEl, { + customClass: "large-tooltip", + delay: { + show: 1250, + hide: 0, + }, + }); + }); + }, + }, +}; diff --git a/ts/pages/home.ts b/ts/pages/home.ts new file mode 100644 index 0000000..f684535 --- /dev/null +++ b/ts/pages/home.ts @@ -0,0 +1,46 @@ +import { Carousel } from "bootstrap"; + +document.addEventListener("DOMContentLoaded", function () { + + if (!document.querySelector("main.home-page")) { + return; + } + + + // * BR Carousel (With BS) + const lotsCarousel = document.getElementById("carousel-lots"); + if (lotsCarousel) { + const playPauseBtn = document.getElementById("coupons-carousel-play-btn"); + const carousel = Carousel.getOrCreateInstance(lotsCarousel, { + // * Start cycle on swipe (or play btn) + ride: true + }); + let isRunning = false; + + if (playPauseBtn) { + const updatePlayBtnStatus = () => { + // * Toggle once + if (!isRunning) { + playPauseBtn.children.item(0)?.classList.remove("d-none"); + playPauseBtn.children.item(1)?.classList.add("d-none"); + } else { + playPauseBtn.children.item(0)?.classList.add("d-none"); + playPauseBtn.children.item(1)?.classList.remove("d-none"); + } + }; + playPauseBtn.addEventListener("click", () => { + if (isRunning) { + carousel.pause(true); + } else { + carousel.cycle(); + } + isRunning = !isRunning; + updatePlayBtnStatus(); + }); + lotsCarousel.addEventListener("slide.bs.carousel", () => { + isRunning = true; + updatePlayBtnStatus(); + }); + } + } +}); diff --git a/ts/pages/products.ts b/ts/pages/products.ts new file mode 100644 index 0000000..314268d --- /dev/null +++ b/ts/pages/products.ts @@ -0,0 +1,45 @@ +import GLightbox from "glightbox"; + + +document.addEventListener("DOMContentLoaded", function () { + if (!document.querySelector("main.product-page")) { + return; + } + + const pictureLinks = document.querySelectorAll(".glightbox") as NodeListOf, + pictures = document.querySelectorAll(".glightbox img") as NodeListOf, + imageCount = pictures.length; + let counter: number = 0, + glightbox: GLightbox|null = null; + + function incrementCounter() { + counter++; + if ( counter === imageCount ) { + glightbox = new GLightbox({ + selector: ".glightbox", + }); + } + } + + pictures.forEach((imageElement) => { + if (imageElement.complete) { + incrementCounter(); + } else { + imageElement.addEventListener( "load", incrementCounter, false ); + } + }); + + pictureLinks.forEach((linkElement, index) => linkElement.addEventListener("keydown", (kbdEvt:KeyboardEvent) => { + if ( + kbdEvt.key == " " || + kbdEvt.code == "Space" || + kbdEvt.keyCode == 32 || + kbdEvt.key == "Enter" || + kbdEvt.code == "Enter" || + kbdEvt.keyCode == 13 + ) { + glightbox.openAt(index); + kbdEvt.preventDefault(); + } + })); +}); diff --git a/ts/pages/won.ts b/ts/pages/won.ts new file mode 100644 index 0000000..7967bb4 --- /dev/null +++ b/ts/pages/won.ts @@ -0,0 +1,103 @@ +document.addEventListener("DOMContentLoaded", function () { + if (!document.querySelector("main.won-page")) { + return; + } + + const wheelWrapper = document.getElementById("wheel-wrapper"), + spinWheelInner = wheelWrapper?.querySelector(".wheel-inner") as HTMLElement | null | undefined, + spinWheelBtnList = wheelWrapper?.querySelectorAll(".wheel-spin") as NodeListOf | undefined, + animationSection = document.getElementById("spin-animation"), + prizeSection = document.getElementById("prize-section"), + discountSection = document.getElementById("discount-section"), + winningProofSection = document.getElementById("winning-proof-section"); + + /** Hide animation and show win sections */ + const toggleAnimationPhase = () => { + if (animationSection) { + animationSection.classList.add("d-none"); + } + if (prizeSection) { + prizeSection.classList.remove("d-none"); + }else if (discountSection) { + discountSection.classList.remove("d-none"); + } else { + throw new Error("No section to toggle"); + } + if (winningProofSection) { + winningProofSection.classList.remove("d-none"); + } + }; + + if (!animationSection) { + throw Error("section#spin-animation missing"); + } + + if (wheelWrapper && spinWheelInner && spinWheelBtnList && spinWheelBtnList.length) { + let clicks: number = 0; + // * Set default degree (360*5) soit 5 tours + const degree: number = (360 * 5), + wheelPartsDeg: number = 360 / spinWheelInner.children.length, + thisWinAngle: number = (Number.parseInt( + String(wheelWrapper.dataset["winChild"]) + // On s'aligne sur la tranche on on ajoute entre 10% et 90% d'une part + )) * wheelPartsDeg - 45 + (wheelPartsDeg * (Math.random() * (0.9 - 0.1) + 0.1)); + let timeout: NodeJS.Timeout | null = null; + + const spinTheWheel = () => { + // * Add 1 every click + + /** + * Multiply the degree by number of clicks + * generate random number between 1 - 85, + * then add to the new degree + */ + const newDegree = degree * ++clicks; + const totalDegree = newDegree + thisWinAngle; + + /** + * Let's make the spin btn to tilt every + * time the edge of the section hits + * the indicator + */ + spinWheelInner.style["transform"] = `rotate(${totalDegree}deg)`; + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(toggleAnimationPhase, 7000); + }; + /** ! Même Algo que sur GGW legacy */ + spinWheelBtnList.forEach((spinBtn) => { + spinBtn.addEventListener("click", spinTheWheel); + spinBtn.addEventListener("keydown", (kbdEvt: KeyboardEvent) => { + if ( + kbdEvt.key == " " || + kbdEvt.code == "Space" || + kbdEvt.keyCode == 32 || + kbdEvt.key == "Enter" || + kbdEvt.code == "Enter" || + kbdEvt.keyCode == 13 + ) { + spinBtn.classList.add("active"); + spinTheWheel(); + kbdEvt.preventDefault(); + } + }); + spinBtn.addEventListener("keyup", (kbdEvt: KeyboardEvent) => { + if ( + kbdEvt.key == " " || + kbdEvt.code == "Space" || + kbdEvt.keyCode == 32 || + kbdEvt.key == "Enter" || + kbdEvt.code == "Enter" || + kbdEvt.keyCode == 13 + ) { + spinBtn.classList.remove("active"); + kbdEvt.preventDefault(); + } + }); + }); + } else { + toggleAnimationPhase(); + } +}); + diff --git a/ts/partials/.gitkeep b/ts/partials/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ts/types/.gitkeep b/ts/types/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ts/utilities/bootstrap.ts b/ts/utilities/bootstrap.ts new file mode 100644 index 0000000..3457350 --- /dev/null +++ b/ts/utilities/bootstrap.ts @@ -0,0 +1,21 @@ +import axios from "axios"; +import * as bootstrap from "bootstrap"; +import bsTooltips from "./../modules/bsTooltips"; + +/** + * 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. + */ +axios.defaults.headers.common = { + Accept: "application/json, text/plain, */*", + "X-Requested-With": "XMLHttpRequest", + "X-CSRF-TOKEN": document + .querySelector("meta[name=\"csrf-token\"]")! + .getAttribute("content"), +}; + +window.axios = axios; +window.bootstrap = bootstrap; + +bsTooltips.methods.initTooltips(); diff --git a/ts/utilities/fontawesome.ts b/ts/utilities/fontawesome.ts new file mode 100644 index 0000000..18632e4 --- /dev/null +++ b/ts/utilities/fontawesome.ts @@ -0,0 +1,94 @@ +import { config, dom, library } from "@fortawesome/fontawesome-svg-core"; +import { + faArrowAltCircleDown, + faArrowAltCircleUp, + faArrowDown, + faArrowLeft, + faArrowLeftLong, + faArrowRight, + faArrowRightFromBracket, + faArrowUp, + faArrowsAltH, + faArrowsAltV, + faBackspace, + faBan, + faCheck, + faChevronLeft, + faChevronRight, + faCircleCheck, + faCircleExclamation, + faCircleInfo, + faCircleNotch, + faCircleXmark, + faCopy, + faCrop, + faEraser, + faEye, + faEyeSlash, + faFolderOpen, + faGift, + faListUl, + faPause, + faPencil, + faPlay, + faPlus, + faQuestionCircle, + faRedoAlt, + faSearch, + faSearchMinus, + faSearchPlus, + faSliders, + faSyncAlt, + faTimes, + faTrash, + faUndoAlt, + faWandMagic +} from "@fortawesome/free-solid-svg-icons"; + +config.autoReplaceSvg = false; +library.add(faEraser); +library.add(faArrowLeftLong); +library.add(faPlus); +library.add(faTrash); +library.add(faEye); +library.add(faEyeSlash); +library.add(faFolderOpen); +library.add(faCrop); +library.add(faQuestionCircle); +library.add(faCheck); +library.add(faUndoAlt); +library.add(faRedoAlt); +library.add(faSyncAlt); +library.add(faSearchPlus); +library.add(faSearchMinus); +library.add(faArrowLeft); +library.add(faArrowRight); +library.add(faArrowUp); +library.add(faArrowDown); +library.add(faArrowsAltH); +library.add(faArrowsAltV); +library.add(faWandMagic); +library.add(faPencil); +library.add(faTimes); +library.add(faBackspace); +library.add(faSearch); +library.add(faArrowRightFromBracket); +library.add(faArrowAltCircleDown); +library.add(faArrowAltCircleUp); +library.add(faCircleCheck); +library.add(faCircleXmark); +library.add(faCopy); +library.add(faListUl); +library.add(faBan); +library.add(faCircleExclamation); +library.add(faCircleInfo); +library.add(faChevronLeft); +library.add(faChevronRight); +library.add(faCircleXmark); +library.add(faCircleNotch); +library.add(faSliders); +library.add(faPlay); +library.add(faPause); +library.add(faGift); + +dom.watch(); diff --git a/ts/utilities/vue-fo.ts b/ts/utilities/vue-fo.ts new file mode 100644 index 0000000..d46a0f4 --- /dev/null +++ b/ts/utilities/vue-fo.ts @@ -0,0 +1,56 @@ +import type { App, Component } from "vue"; +import { createApp } from "vue"; + +document.addEventListener("DOMContentLoaded", () => { + const setupApp = (app: App) => { + app.config.globalProperties.window = window; + app.config.globalProperties.document = document; + }; + + // Register components + /// + const vues = import.meta.glob("./../components/*.vue") as Record< + string, + () => Promise<{ default: Component }> + >; + for (const vueCptName in vues) { + const vueCptPromise = vues[vueCptName]; + let htmlKey = vueCptName.split("/").pop(); + if (!htmlKey) { + throw new Error(`Cannot load ${vueCptName}`); + } + htmlKey = htmlKey + .split(".")[0] + .replace(/\.?([A-Z])/g, function (x, y) { + return "-" + y.toLowerCase(); + }) + .replace(/^-/, "") + .replace("-component", ""); + + const el = document.getElementById(htmlKey), + elGroup = document.getElementsByClassName(htmlKey); + // * Init using ID + if (el) { + vueCptPromise().then((vueParsedFile) => { + const app = createApp(vueParsedFile.default, { + json: el.dataset.json ?? {}, + }); + setupApp(app); + app.mount(el); + }); + } + // * Init Using class + for (const grpEl of elGroup) { + // * Hack to prevent loop weirdness + vueCptPromise().then((vueParsedFile) => { + setTimeout(() => { + const app = createApp(vueParsedFile.default, { + json: (grpEl as HTMLElement).dataset.json ?? {}, + }); + setupApp(app); + app.mount(grpEl); + }, 500); + }); + } + } +}); diff --git a/views/auth/login.blade.php b/views/auth/login.blade.php new file mode 100644 index 0000000..b694992 --- /dev/null +++ b/views/auth/login.blade.php @@ -0,0 +1,104 @@ +@extends('theme::layout') + +@section('title', __('Connexion')) +@section('description', __('Connexion')) + +@section('no-flash', true) + +@section('content') +
+ @error('email') +
+
+ +
+
+ @enderror +
+
+ {{ __('Je m\'inscris') }} +

{{ __('Pour participer et tenter votre chance, inscrivez-vous !') }}

+ {{ __('Inscription') }} +
+
+
+
+ + {{ __('Je me connecte') }} +

+ {{ __('Si vous possédez déjà un compte Club :company, vous pouvez utiliser les mêmes identifiants.', [ + 'company' => $settingsGlobal->company, + ]) }} +

+
+ @csrf + +
+
+
+
+ + +
+ @error('email') + + @enderror +
+
+
+ +
+
+
+
+ + +
+ @error('password') + + @enderror +
+
+
+ +
+
+
+ + + +
+
+
+ +
+
+ + + @if (Route::has('fo.password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+@endsection diff --git a/views/auth/partials/form-address-info.blade.php b/views/auth/partials/form-address-info.blade.php new file mode 100644 index 0000000..147a66d --- /dev/null +++ b/views/auth/partials/form-address-info.blade.php @@ -0,0 +1,38 @@ +
+ {{ __('Vos coordonnées') }} + + {{-- ADDRESS --}} +
+
+ @include('theme::auth.partials.inputs.address', ['required' => true]) +
+
+ + {{-- ADDRESS2 --}} +
+
+ @include('theme::auth.partials.inputs.address2') +
+
+ + {{-- CITY --}} +
+
+ @include('theme::auth.partials.inputs.city', ['required' => true]) +
+
+ + {{-- POSTCODE --}} +
+
+ @include('theme::auth.partials.inputs.postal_code', ['required' => true]) +
+
+ + {{-- COUNTRY --}} +
+
+ @include('theme::auth.partials.inputs.country', ['required' => true]) +
+
+
diff --git a/views/auth/partials/form-personal-info.blade.php b/views/auth/partials/form-personal-info.blade.php new file mode 100644 index 0000000..a281857 --- /dev/null +++ b/views/auth/partials/form-personal-info.blade.php @@ -0,0 +1,26 @@ +
+ {{ __('Votre profil') }} + +
+ {{-- FIRST_NAME --}} +
+
+ @include('theme::auth.partials.inputs.first_name', ['required' => true]) +
+
+ + {{-- LAST NAME --}} +
+
+ @include('theme::auth.partials.inputs.last_name', ['required' => true]) +
+
+ + {{-- BIRTH_DATE --}} +
+
+ @include('theme::auth.partials.inputs.birth_date', ['required' => true]) +
+
+
+
diff --git a/views/auth/partials/form-security-info.blade.php b/views/auth/partials/form-security-info.blade.php new file mode 100644 index 0000000..05a29e4 --- /dev/null +++ b/views/auth/partials/form-security-info.blade.php @@ -0,0 +1,28 @@ +
+ {{ __('Vos identifiants') }} + +
+ {{-- EMAIL --}} +
+
+ @include('theme::auth.partials.inputs.email', ['required' => true]) +
+
+ + {{-- PASSWORD --}} +
+
+ @include('theme::auth.partials.inputs.password', ['required' => true]) +
+
+ + {{-- PASSWORD CONFIRMATION --}} +
+
+ @include('theme::auth.partials.inputs.password_confirmation', ['required' => true]) +
+
+ + @include('theme::auth.password-min-strength') +
+
diff --git a/views/auth/partials/inputs/address.blade.php b/views/auth/partials/inputs/address.blade.php new file mode 100644 index 0000000..fb1c433 --- /dev/null +++ b/views/auth/partials/inputs/address.blade.php @@ -0,0 +1,18 @@ +
+ $errors->has('address'), + ]) autocomplete="address-line1" @readonly(!empty($readonly)) @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('address') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/address2.blade.php b/views/auth/partials/inputs/address2.blade.php new file mode 100644 index 0000000..f13fb73 --- /dev/null +++ b/views/auth/partials/inputs/address2.blade.php @@ -0,0 +1,18 @@ +
+ $errors->has('address2'), + ]) autocomplete="address-line2" @readonly(!empty($readonly)) @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('address2') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/birth_date.blade.php b/views/auth/partials/inputs/birth_date.blade.php new file mode 100644 index 0000000..025643c --- /dev/null +++ b/views/auth/partials/inputs/birth_date.blade.php @@ -0,0 +1,17 @@ +
+ @php + $dataBirthDate = [ + 'id' => 'register-birth_date', + 'class' => 'form-control mx-auto ' . ($errors->has('birth_date') ? 'is-invalid' : ''), + 'name' => 'birth_date', + 'placeholder' => Str::ucfirst(__('validation.attributes.date_of_birth')) . (!empty($required) ? '*' : ''), + 'autocomplete' => 'bday', + 'required' => !empty($required), + 'value' => old('birth_date', $crmCustomer->birth_date ?? null), + ]; + @endphp +
+ @foreach ($errors->get('birth_date') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/city.blade.php b/views/auth/partials/inputs/city.blade.php new file mode 100644 index 0000000..f05e80e --- /dev/null +++ b/views/auth/partials/inputs/city.blade.php @@ -0,0 +1,16 @@ +
+ $errors->has('city'), + ]) + placeholder="{{ __('validation.attributes.city') }}*" autocomplete="address-level2" @readonly(!empty($readonly)) @disabled(!empty($disabled)) + @required(!empty($required)) /> + + @foreach ($errors->get('city') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/country.blade.php b/views/auth/partials/inputs/country.blade.php new file mode 100644 index 0000000..d99b7bf --- /dev/null +++ b/views/auth/partials/inputs/country.blade.php @@ -0,0 +1,37 @@ +
+ @php + // * Avoir les DROM-COM + France + $franceCountries = collect(\LDC\LDCCRM\Enums\Country::getValidCountries())->filter(fn($enum) => !in_array($enum, [LDC\LDCCRM\Enums\Country::belgium(), LDC\LDCCRM\Enums\Country::luxembourg()])); + $countries = collect(\LDC\LDCCRM\Enums\Country::getValidCountries())->filter(fn($enum) => !$franceCountries->contains($enum)); + $old_country = old('country', optional($crmCustomer->country ?? null)->value ?: null); + @endphp + + + @foreach ($errors->get('country') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/email.blade.php b/views/auth/partials/inputs/email.blade.php new file mode 100644 index 0000000..8962130 --- /dev/null +++ b/views/auth/partials/inputs/email.blade.php @@ -0,0 +1,16 @@ +
+ $errors->has('email'), + ]) placeholder="{{ __('validation.attributes.email') }}*" autocomplete="email" @readonly(!empty($readonly)) + @readonly(!empty($readonly)) @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('email') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/first_name.blade.php b/views/auth/partials/inputs/first_name.blade.php new file mode 100644 index 0000000..5bf7cb6 --- /dev/null +++ b/views/auth/partials/inputs/first_name.blade.php @@ -0,0 +1,16 @@ +
+ $errors->has('lastname'), + ]) placeholder="{{ __('validation.attributes.last_name') }}*" autocomplete="given-name" @readonly(!empty($readonly)) + @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('lastname') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/last_name.blade.php b/views/auth/partials/inputs/last_name.blade.php new file mode 100644 index 0000000..0974cf3 --- /dev/null +++ b/views/auth/partials/inputs/last_name.blade.php @@ -0,0 +1,16 @@ +
+ $errors->has('firstname'), + ]) placeholder="{{ __('validation.attributes.first_name') }}*" autocomplete="family-name" @readonly(!empty($readonly)) + @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('firstname') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/password.blade.php b/views/auth/partials/inputs/password.blade.php new file mode 100644 index 0000000..5440be4 --- /dev/null +++ b/views/auth/partials/inputs/password.blade.php @@ -0,0 +1,21 @@ +
+
+ $errors->has('password'), + ]) + placeholder="{{ __('validation.attributes.password') }}*" autocomplete="new-password" @readonly(!empty($readonly)) + @disabled(!empty($disabled)) @required(!empty($required)) /> + +
+ @php $dataPassword = ['inputId' => 'register-password']; @endphp + + @foreach ($errors->get('password') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/password_confirmation.blade.php b/views/auth/partials/inputs/password_confirmation.blade.php new file mode 100644 index 0000000..6cc38a5 --- /dev/null +++ b/views/auth/partials/inputs/password_confirmation.blade.php @@ -0,0 +1,21 @@ +
+
+ $errors->has('password_confirmation'), + ]) + placeholder="{{ __('validation.attributes.password_confirmation') }}*" autocomplete="new-password" @readonly(!empty($readonly)) + @disabled(!empty($disabled)) @required(!empty($required)) /> + +
+ @php $dataConfirmPassword = ['inputId' => 'register-password-confirmation']; @endphp + + @foreach ($errors->get('password_confirmation') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/phone.blade.php b/views/auth/partials/inputs/phone.blade.php new file mode 100644 index 0000000..92f7b52 --- /dev/null +++ b/views/auth/partials/inputs/phone.blade.php @@ -0,0 +1,18 @@ +
+ $errors->has('phone'), + ]) autocomplete="tel" @readonly(!empty($readonly)) @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('phone') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/partials/inputs/postal_code.blade.php b/views/auth/partials/inputs/postal_code.blade.php new file mode 100644 index 0000000..c43687e --- /dev/null +++ b/views/auth/partials/inputs/postal_code.blade.php @@ -0,0 +1,18 @@ +
+ $errors->has('postal_code'), + ]) autocomplete="postal-code" @readonly(!empty($readonly)) @disabled(!empty($disabled)) @required(!empty($required)) /> + + @foreach ($errors->get('postal_code') as $message) +
{{ $message }}
+ @endforeach +
diff --git a/views/auth/password-min-strength.blade.php b/views/auth/password-min-strength.blade.php new file mode 100644 index 0000000..de08693 --- /dev/null +++ b/views/auth/password-min-strength.blade.php @@ -0,0 +1,13 @@ +
+
+ + {!! nl2br( + clean( + __( + "Le mot de passe doit avoir une longueur de 8 caractères minimum,\n doit contenir une lettre majuscule et une lettre minucule,\n doit contenir un caractère spécial comme une virgule par exemple,\n doit contenir un chiffre.", + ), + ), + ) !!} + +
+
diff --git a/views/auth/passwords/confirm.blade.php b/views/auth/passwords/confirm.blade.php new file mode 100644 index 0000000..442c203 --- /dev/null +++ b/views/auth/passwords/confirm.blade.php @@ -0,0 +1,53 @@ +@extends('theme::layout') + +@section('title', __('Confirmer son adresse e-mail')) +@section('description', __('Confirmer son adresse e-mail')) + +@section('content') +
+
+
+
+
{{ __('Confirm Password') }}
+ +
+ {{ __('Please confirm your password before continuing.') }} + +
+ @csrf + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+ + + @if (Route::has('fo.password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/views/auth/passwords/email.blade.php b/views/auth/passwords/email.blade.php new file mode 100644 index 0000000..ac51509 --- /dev/null +++ b/views/auth/passwords/email.blade.php @@ -0,0 +1,44 @@ +@extends('theme::layout') + +@section('title', __('Réinitialiser son mot de passe')) +@section('description', __('Réinitialiser son mot de passe')) + +@section('content') +
+
+
+

{{ __('Reset Password') }}

+
+
+
+
+
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+
+ +
+
+
+
+
+
+@endsection diff --git a/views/auth/passwords/reset.blade.php b/views/auth/passwords/reset.blade.php new file mode 100644 index 0000000..7aacea6 --- /dev/null +++ b/views/auth/passwords/reset.blade.php @@ -0,0 +1,85 @@ +@extends('theme::layout') + +@section('title', __('Réinitialiser son mot de passe')) +@section('description', __('Réinitialiser son mot de passe')) + +@section('content') +
+
+
+

{{ __('Reset Password') }}

+
+
+
+
+
+ @csrf + + + +
+
+
+
+ + + @foreach ($errors->get('email') as $message) +
{{ $message }}
+ @endforeach +
+
+
+ +
+
+
+
+ + +
+ @php $dataPassword = ['inputId' => 'register-password']; @endphp + + @foreach ($errors->get('password') as $message) +
{{ $message }}
+ @endforeach +
+
+
+ +
+
+
+
+ + +
+ @php $dataConfirmPassword = ['inputId' => 'register-password-confirmation']; @endphp + + @foreach ($errors->get('password_confirmation') as $message) +
{{ $message }}
+ @endforeach +
+
+
+ @include('theme::auth.password-min-strength') + +
+
+ +
+
+
+
+
+
+
+@endsection diff --git a/views/auth/profil-verify.blade.php b/views/auth/profil-verify.blade.php new file mode 100644 index 0000000..462ccd3 --- /dev/null +++ b/views/auth/profil-verify.blade.php @@ -0,0 +1,141 @@ +@extends('theme::layout') + +@section('title', __('Vérifier mes informations')) +@section('description', __('Vérifier mes informations pour participer au jeu')) + +@section('content') +
+
+
+

+ {{ __('Mon compte du club :company', ['company' => $settingsGlobal->company]) }}

+ +
+ @csrf + @method('PUT') + +
+
+ {{ __("Pour pouvoir jouer, merci de renseigner/compléter les champs ci-dessous\u{00A0}:") }} +
+
+ +
+ {{ __('Vos coordonnées') }} + + {{-- Force next columns to break to new line --}} +
+ + {{-- FIRST_NAME --}} +
+ @include('theme::auth.partials.inputs.first_name', ['required' => true]) +
+ + {{-- LAST_NAME --}} +
+ @include('theme::auth.partials.inputs.last_name', ['required' => true]) +
+ + {{-- ADDRESS --}} +
+ @include('theme::auth.partials.inputs.address', ['required' => true]) +
+ + {{-- ADDRESS2 --}} +
+ @include('theme::auth.partials.inputs.address2') +
+ + {{-- POSTAL_CODE --}} +
+ @include('theme::auth.partials.inputs.postal_code', ['required' => true]) +
+ + {{-- CITY --}} +
+ @include('theme::auth.partials.inputs.city', ['required' => true]) +
+ + {{-- COUNTRY --}} +
+ @include('theme::auth.partials.inputs.country', ['required' => true]) +
+ + {{-- PHONE --}} +
+ @include('theme::auth.partials.inputs.phone') +
+ + {{-- BIRTH_DATE --}} +
+ @include('theme::auth.partials.inputs.birth_date', ['readonly' => true]) +
+ + {{-- EMAIL --}} +
+ @include('theme::auth.partials.inputs.email', ['readonly' => true]) +
+ +
+ + {{-- CHECKBOXES --}} +
+
+
+ $errors->has('opt_in'), + ]) + @checked($crmCustomer->opt_in)> + +
+ @foreach ($errors->get('opt_in') as $message) +
{{ $message }}
+ @endforeach +
+
+
+
+
+ $errors->has('ok_cgv'), + ]) required /> + +
+ @foreach ($errors->get('ok_cgv') as $message) +
{{ $message }}
+ @endforeach +
+
+ +
+
+ +
+
+ +
+
+ {{ __('* champs obligatoires') }} +
+
+
+
+
+
+@endsection diff --git a/views/auth/register.blade.php b/views/auth/register.blade.php new file mode 100644 index 0000000..0ca46ec --- /dev/null +++ b/views/auth/register.blade.php @@ -0,0 +1,93 @@ +@extends('theme::layout') + +@section('title', __('Créer un compte')) +@section('description', __('Créer un compte')) + +@section('content') +
+
+
+

+ {{ __('S\'inscrire au club :company', ['company' => $settingsGlobal->company]) }}

+ +
+ @csrf + +
+
+ {{ __("Merci de renseigner les champs ci-dessous\u{00A0}:") }} +
+
+ + {{-- PERSONAL INFO --}} + @include('theme::auth.partials.form-personal-info', [ + 'colClasses' => 'col col-md-10 col-lg-8 py-2', + ]) + + {{-- ADDRESS INFO --}} + @include('theme::auth.partials.form-address-info', [ + 'colClasses' => 'col col-md-10 col-lg-8 py-2', + ]) + + {{-- SECURITY INFO --}} + @include('theme::auth.partials.form-security-info') + + {{-- CHECKBOXES --}} +
+
+
+ $errors->has('opt_in'), + ])> + +
+ @foreach ($errors->get('opt_in') as $message) +
{{ $message }}
+ @endforeach +
+
+
+
+
+ $errors->has('ok_cgv'), + ]) required /> + +
+ @foreach ($errors->get('ok_cgv') as $message) +
{{ $message }}
+ @endforeach +
+
+ +
+
+ +
+
+ +
+
+ {{ __('* champs obligatoires') }} +
+
+
+
+
+
+@endsection diff --git a/views/auth/verify.blade.php b/views/auth/verify.blade.php new file mode 100644 index 0000000..0483e6c --- /dev/null +++ b/views/auth/verify.blade.php @@ -0,0 +1,30 @@ +@extends('theme::layout') + +@section('title', __('Vérifier son adresse e-mail')) +@section('description', __('Vérifier son adresse e-mail')) + +@section('content') +
+
+
+

{{ __('Verify Your Email Address') }}

+
+
+
+
+ @if (session('resent')) + + @endif + + {{ __('Before proceeding, please check your email for a verification link.') }} + {{ __('If you did not receive the email') }}, +
+ @csrf + . +
+
+
+
+@endsection diff --git a/views/layout-teaser.blade.php b/views/layout-teaser.blade.php new file mode 100644 index 0000000..5236184 --- /dev/null +++ b/views/layout-teaser.blade.php @@ -0,0 +1,25 @@ + + + +@include('theme::layouts.head') + + +
+ @include('theme::layouts.teaser.header') +
+ +
+ @yield('content') +
+ +
+ @include('theme::layouts.teaser.footer') +
+ + @include('back::modules.script-routes') + @include('theme::vendor.cn-cookies') + @vite(['resources/theme/mounted/ts/fo.ts']) + @stack('scripts') + + + diff --git a/views/layout.blade.php b/views/layout.blade.php new file mode 100644 index 0000000..5c44f26 --- /dev/null +++ b/views/layout.blade.php @@ -0,0 +1,35 @@ + + + +@include('theme::layouts.head') + + +
+ @include('theme::layouts.header') +
+ + @sectionMissing('no-flash') +
+
+
+ @include('theme::modules.flash-messages') +
+
+
+ @endif + +
+ @yield('content') +
+ +
+ @include('theme::layouts.footer') +
+ + @include('back::modules.script-routes') + @include('theme::vendor.cn-cookies') + @vite(['resources/theme/mounted/ts/fo.ts']) + @stack('scripts') + + + diff --git a/views/layouts/footer-links.blade.php b/views/layouts/footer-links.blade.php new file mode 100644 index 0000000..75e2ac7 --- /dev/null +++ b/views/layouts/footer-links.blade.php @@ -0,0 +1,21 @@ +{{-- External LINKS --}} +
+ {{ __('Rejoignez-nous sur') }} + + + {{ __('Découvrez tous nos produits sur :link', ['link' => '']) }} + {{ Str::ucfirst(parse_url($settingsGlobal->redirect_close, \PHP_URL_HOST)) }} + +
diff --git a/views/layouts/footer.blade.php b/views/layouts/footer.blade.php new file mode 100644 index 0000000..b4f93ae --- /dev/null +++ b/views/layouts/footer.blade.php @@ -0,0 +1,45 @@ + + +@include('theme::layouts.up-arrow') diff --git a/views/layouts/head.blade.php b/views/layouts/head.blade.php new file mode 100644 index 0000000..8f62f4e --- /dev/null +++ b/views/layouts/head.blade.php @@ -0,0 +1,54 @@ +{{-- Meta --}} + +{{-- blade-formatter-disable --}} +@hasSection('metaIndex') + +@else + +@endif +{{-- blade-formatter-enable --}} + + + + +{{-- Open Graph --}} +{{-- blade-formatter-disable-next-line --}} + + + + + + + +{{-- Favicon --}} +{{-- GENERER favicon avec un outil https://realfavicongenerator.net/ --}} + + + + + + + + +{{-- Others --}} +{{-- blade-formatter-disable-next-line --}} +{{ $settingsGlobal->name ?? config('app.name') }}@hasSection('title') - @yield('title')@endif + +{{-- blade-formatter-disable --}} +@hasSection('canonical') + +@else + +@endif +{{-- blade-formatter-enable --}} + +{{-- STYLES --}} +@vite(['resources/theme/mounted/sass/fo.scss']) +@stack('styles') + +{{-- DEBUG --}} +@if (config('app.debug')) + +@endif diff --git a/views/layouts/header-logo.blade.php b/views/layouts/header-logo.blade.php new file mode 100644 index 0000000..68b93b3 --- /dev/null +++ b/views/layouts/header-logo.blade.php @@ -0,0 +1,23 @@ +
+
+ + + {{ $settingsGlobal->name ?? config('app.name') }} + + + {{ __('Logo Gauloisir') }} + + + @if (!request()->routeis('fo.teaser') and !request()->routeis('re7.teaser')) +
+ +
+ @endif +
+
diff --git a/views/layouts/header.blade.php b/views/layouts/header.blade.php new file mode 100644 index 0000000..0215e32 --- /dev/null +++ b/views/layouts/header.blade.php @@ -0,0 +1,81 @@ + diff --git a/views/layouts/teaser/footer.blade.php b/views/layouts/teaser/footer.blade.php new file mode 100644 index 0000000..7303b8a --- /dev/null +++ b/views/layouts/teaser/footer.blade.php @@ -0,0 +1,23 @@ +
+
+ @include('theme::layouts.footer-links') + + {{-- LINKS --}} + +
+ +
+ +@include('theme::layouts.up-arrow') diff --git a/views/layouts/teaser/header.blade.php b/views/layouts/teaser/header.blade.php new file mode 100644 index 0000000..402e82f --- /dev/null +++ b/views/layouts/teaser/header.blade.php @@ -0,0 +1,12 @@ + diff --git a/views/layouts/up-arrow.blade.php b/views/layouts/up-arrow.blade.php new file mode 100644 index 0000000..230d93c --- /dev/null +++ b/views/layouts/up-arrow.blade.php @@ -0,0 +1,3 @@ + diff --git a/views/mails/prize-sent.blade.php b/views/mails/prize-sent.blade.php new file mode 100644 index 0000000..210d792 --- /dev/null +++ b/views/mails/prize-sent.blade.php @@ -0,0 +1,16 @@ +{{-- blade-formatter-disable --}} + +# {{ __('Bonjour :first_name ,', ['first_name' => $first_name]) }} + +{{ __('Votre gain faisant suite à votre participation à bien été envoyé.') }} + +{{ __('Vous recevrez prochainement votre dotation à votre domicile.') }} + + +{{ __('Nous vous remercions de votre participation.') }} +{{ __('L\'équipe :game_name .', ['game_name' => Str::ucfirst($game_name)]) }} + +{{ __('Si vous avez des questions, n\'hésitez pas à nous contacter via notre [formulaire de contact](:url).', [ + 'url' => 'https://www.legaulois.fr/contactez-nous' +]) }} + diff --git a/views/mails/submited-proof.blade.php b/views/mails/submited-proof.blade.php new file mode 100644 index 0000000..3a7cadf --- /dev/null +++ b/views/mails/submited-proof.blade.php @@ -0,0 +1,16 @@ +{{-- blade-formatter-disable --}} + +# {{ __('Merci :first_name ,', ['first_name' => $first_name]) }} + +{{ __('Nous avons bien recu à ce jour vos preuves de gains.') }} + +{{ __('Vous recevrez prochainement votre dotation à votre domicile.') }} + + +{{ __('Nous vous remercions de votre participation.') }} +{{ __('L\'équipe :game_name .', ['game_name' => Str::ucfirst($game_name)]) }} + +{{ __('Si vous avez des questions, n\'hésitez pas à nous contacter via notre [formulaire de contact](:url).', [ + 'url' => 'https://www.legaulois.fr/contactez-nous' +]) }} + diff --git a/views/mails/won-discount.blade.php b/views/mails/won-discount.blade.php new file mode 100644 index 0000000..c0217d3 --- /dev/null +++ b/views/mails/won-discount.blade.php @@ -0,0 +1,25 @@ +{{-- blade-formatter-disable --}} + +# {{ __('Bravo :first_name !', ['first_name' => $first_name]) }} + +{{ __('Vous venez de gagner un bon d\'achat de :face_value € en participant à notre grand jeu :game_name .', [ + 'face_value' => number_format($discount->face_value / 100, 2, ','), + 'game_name' => Str::ucfirst($game_name), +]) }} + + + + +{{ __('Cliquez ici pour accéder à la page d\'impression de votre bon') }} + + +{{ __('Assurez-vous d\'être équipé d\'une imprimante en état de marche avant de lancer l\'impression de votre bon, il ne pourra être imprimé et utilisé qu\'une seule fois.') }} + + +{{ __('Nous vous remercions de votre participation.') }} +{{ __('L\'équipe :game_name .', ['game_name' => Str::ucfirst($game_name)]) }} + +{{ __('Si vous avez des questions, n\'hésitez pas à nous contacter via notre [formulaire de contact](:url).', [ + 'url' => 'https://www.legaulois.fr/contactez-nous' +]) }} + diff --git a/views/mails/won-prize.blade.php b/views/mails/won-prize.blade.php new file mode 100644 index 0000000..a6e0e72 --- /dev/null +++ b/views/mails/won-prize.blade.php @@ -0,0 +1,18 @@ +{{-- blade-formatter-disable --}} + +# {{ __('Bravo :first_name !', ['first_name' => $first_name]) }} + +{{ __('Vous venez de gagner 1 :prize en participant à notre grand jeu :game_name .', [ + 'prize' => Str::ucfirst($prize_label), + 'game_name' => Str::ucfirst($game_name), +]) }} + +{{ __('Vous recevrez prochainement votre dotation à votre domicile.') }} + +{{ __('Nous vous remercions de votre participation.') }} +{{ __('L\'équipe :game_name .', ['game_name' => Str::ucfirst($game_name)]) }} + +{{ __('Si vous avez des questions, n\'hésitez pas à nous contacter via notre [formulaire de contact](:url).', [ + 'url' => 'https://www.legaulois.fr/contactez-nous' +]) }} + diff --git a/views/modules/flash-messages.blade.php b/views/modules/flash-messages.blade.php new file mode 100644 index 0000000..e886502 --- /dev/null +++ b/views/modules/flash-messages.blade.php @@ -0,0 +1,55 @@ +@if (!request()->routeIs('login')) + @if ($message = Session::get('success', Session::get('bo.success'))) + + @endif + + @if ($message = Session::get('error', Session::get('bo.error'))) + + @endif + + @if ($message = Session::get('warning', Session::get('bo.warning'))) + + @endif + + @if ($message = Session::get('status', Session::get('bo.status'))) + + @endif + + @if ($message = Session::get('info', Session::get('bo.info'))) + + @endif + + @if ($errors->any()) + + @endif +@endif diff --git a/views/pages/end-game.blade.php b/views/pages/end-game.blade.php new file mode 100644 index 0000000..7fc46f2 --- /dev/null +++ b/views/pages/end-game.blade.php @@ -0,0 +1,19 @@ +@extends('theme::layout') + +@section('content') +
+
+
+

{{ __('Fin du jeu') }}

+
+
+
+
+

+ {{ __("Le jeu est terminé\u{00A0}") }}
+ {{ __("Merci à tous pour votre participation\u{00A0}!") }} +

+
+
+
+@endsection diff --git a/views/pages/faq.blade.php b/views/pages/faq.blade.php new file mode 100644 index 0000000..b6e2a72 --- /dev/null +++ b/views/pages/faq.blade.php @@ -0,0 +1,48 @@ +@extends('theme::layout') + +@section('title', __('Foire aux questions')) +@section('description', __('La foire aux questions')) + +@section('main-class', 'product-page') + +@section('content') +
+
+
+

{{ __('Foire aux questions') }}

+
+
+ @foreach ($questionModelList->groupBy('theme')->values() as $themeIndex => $themeQuestionsModelList) +
+ @if ($themeQuestionsModelList->count()) +
+

{{ $themeQuestionsModelList->first()->theme->name }}

+
+ @endif +
+
+ @foreach ($themeQuestionsModelList as $questionIndex => $questionModel) +
+

+ +

+
+
+
{!! clean($questionModel->answer) !!}
+
+
+
+ @endforeach +
+
+
+ @endforeach +
+@endsection diff --git a/views/pages/home.blade.php b/views/pages/home.blade.php new file mode 100644 index 0000000..eb56bac --- /dev/null +++ b/views/pages/home.blade.php @@ -0,0 +1,201 @@ +@extends('theme::layout') + +@section('main-class', 'home-page') +@section('content') + {{-- 1st row lots --}} +
+
+ {{ __('Une famille en canoe') }} +
+
+
+
+
+

{{ __('Jouez et tentez de gagner') }}

+
+
+ @if (collect($prizesGlobal)->count()) +
+ @if (Arr::has($prizesGlobal, 0)) +
+
+
+ {{ Arr::get($prizesGlobal, 0)->quantity }} +
+

+ @if (intval(Arr::get($prizesGlobal, 0)->quantity) > 1) + {{ Str::plural(Arr::get($prizesGlobal, 0)->label) }} + @else + {{ Arr::get($prizesGlobal, 0)->label }} + @endif +

+
+ {{ Arr::get($prizesGlobal, 0)->picture_alt }} +
+ @endif + @if (Arr::has($prizesGlobal, 1)) +
+
+
+ {{ Arr::get($prizesGlobal, 1)->quantity }} +
+

+ @if (intval(Arr::get($prizesGlobal, 1)->quantity) > 1) + {{ Str::plural(Arr::get($prizesGlobal, 1)->label) }} + @else + {{ Arr::get($prizesGlobal, 1)->label }} + @endif +

+
+ {{ Arr::get($prizesGlobal, 1)->picture_alt }} +
+ {!! clean(nl2br(__("Ou des milliers\n de bons\n de réduction"))) !!} + {{ __('Réduction de 1 euro') }} +
+
+ @endif +
+ @endif +
+ {{ __('Grand jeu 100% gagnant') }} +
+
+ + {{-- BTN JOUER --}} + + + {{-- 2nd Row how to play --}} +
+
+

{{ __("Comment jouer\u{00A0}?") }}

+ {{ __("Rien de plus simple\u{00A0}! Suivez les 3 étapes décrites à droite et laissez-vous guider.") }} +
+ {{ __('Plusieurs produits de la marque :company', ['company' => $settingsGlobal->company]) }} +
+
+
+
+
+ {{ __('Un panier de course') }} +
+
+ {{ __('Un sticker du jeu') }} +
+
+ {{ __('Un écran d\'ordinateur avec un cadeau en son centre') }} +
+
+
+
+ {{ __('Achetez un produit :company porteur de l\'offre.', ['company' => Str::title($settingsGlobal->company)]) }} +
+ +
+ {{ __('Trouvez le code au dos du sticker, soit en le décollant du produit, soit en lisant en transparence.') }} +
+
+ {{ __("Inscrivez-vous sur ce site, insérez votre code et découvrez ce que vous avez gagné\u{00A0}!") }} +
+
+
+
+ + {{-- 3 row gifts --}} +
+
+
+

{{ __('Les cadeaux') }}

+
+ + +
+
+ + {{-- BTN JOUER --}} + +@endsection diff --git a/views/pages/participation/loose.blade.php b/views/pages/participation/loose.blade.php new file mode 100644 index 0000000..d815f9a --- /dev/null +++ b/views/pages/participation/loose.blade.php @@ -0,0 +1,21 @@ +@extends('theme::layout') + +@section('title', __('Perdu')) +@section('description', __('Vous avez perdu, retentez votre chance')) + +@section('main-class', 'loose-page') +@section('content') +
+
+
+

{{ __('C\'est perdu') }}

+
+
+ +
+@endsection diff --git a/views/pages/participation/participate.blade.php b/views/pages/participation/participate.blade.php new file mode 100644 index 0000000..fae772b --- /dev/null +++ b/views/pages/participation/participate.blade.php @@ -0,0 +1,150 @@ +@extends('theme::layout') + +@section('title', __('Je participe')) +@section('description', __('Je participe au jeu en soumettant mon code unique de participation')) + +@section('main-class', 'participate-page') + +@section('content') +
+ {{-- TITLE --}} +
+
+

{{ __('Saisissez votre code') }}

+
+
+ {{-- TEXT --}} +
+
+

+ {{ __('Pour participer au jeu, munissez-vous du sticker présent sur les produits Le Gaulois participant à l\'opération.') }} +

+

+ {{ __('Attention') }} : {!! __( + ':strong en cas de gain du coffret Wonderbox,:endStrong gardez précieusement :strong le sticker utilisé ainsi que votre ticket de caisse. :endStrong', + [ + 'strong' => '', + 'endStrong' => '', + ], + ) !!} + {{ __('Ils vous seront demandés comme preuves de gain pour valider votre lot.') }} +

+
+ {{ __('Votre sticker') }} +
+
+
+ {{-- FORM --}} +
+
+
+ @csrf +
+ {{-- UNIQUE_CODE --}} +
+
+
+ $errors->has('unique_code'), + ]) autocomplete="off" @required(true) /> + +
+ @error('unique_code') + + @enderror +
+ {{ __('Comporte :length caractères, trouvable au dos du sticker', ['length' => config('codes.codeLength')]) }} +
+ + {{-- Force next columns to break to new line --}} +
+ + @if ($settingsGlobal->use_ean_codes) + {{-- EAN_CODE --}} +
+
+
+ $errors->has('ean_code'), + ]) autocomplete="off" @required(true) /> + +
+ @error('ean_code') + + @enderror +
+ {{ __('Comporte :length caractères, trouvable au dos du produit que vous avez acheté', ['length' => 13]) }} +
+ @endif + + {{-- Force next columns to break to new line --}} +
+ + {{-- CGV --}} +
+
+ $errors->has('game_rules'), + ]) required /> + +
+ @foreach ($errors->get('game_rules') as $message) +
{{ $message }}
+ @endforeach +
+
+
+
+ * {{ __('Champs obligatoires') }} +
+
+
+
+ +
+
+
+
+
+
+@endsection diff --git a/views/pages/participation/participation-exhausted.blade.php b/views/pages/participation/participation-exhausted.blade.php new file mode 100644 index 0000000..bce5ae0 --- /dev/null +++ b/views/pages/participation/participation-exhausted.blade.php @@ -0,0 +1,25 @@ +@extends('theme::layout') + +@section('title', __('Plus de participations')) +@section('description', __('Désolé, mais vous ne pouvez plus participer au jeu')) + +@section('content') +
+
+
+

{{ __('Participation épuisée') }}

+
+
+
+
+

{{ __('Vous ne pouvez plus participer à ce jeu car vous avez déjà participé trop de fois.') }}

+
+
+ +
+@endsection diff --git a/views/pages/participation/parts/animation.blade.php b/views/pages/participation/parts/animation.blade.php new file mode 100644 index 0000000..c0e2622 --- /dev/null +++ b/views/pages/participation/parts/animation.blade.php @@ -0,0 +1,62 @@ +
+
+
+

{{ __('Lancez la roue et découvrez votre gain') }}

+
+
+
+
+ {{-- SPIN WHEEL --}} + {{-- blade-formatter-disable --}} + @php + $prizesIdList = \App\Models\Prize::query()->pluck('id'); + $brPicture = Vite::asset('resources/theme/mounted/assets/images/animations/br-spin.png'); + $lotWbHappy = Vite::asset('resources/theme/mounted/assets/images/animations/wb-happy-spin.png'); + $lotWbFamilly = Vite::asset('resources/theme/mounted/assets/images/animations/wb-famille-spin.png'); + /** ID => picture */ + $wheelParts = collect([ + [$lotWbFamilly, $prizesIdList->get(0)], + [$brPicture, 'br'], + [$lotWbHappy, $prizesIdList->get(1)], + [$brPicture, 'br'], + ]); + // * Quel fragment va tomber + $spinChild = !empty($prizeModel) ? $wheelParts->search(fn($wheelPart) => Arr::get($wheelPart, 1) === $prizeModel->id) : null; + $spinChild = (is_null($spinChild) and $winDiscount) ? $wheelParts->search(fn($wheelPart) => Arr::get($wheelPart, 1) === 'br') : $spinChild; + @endphp + {{-- blade-formatter-enable --}} +
+ +
+
+ @foreach ($wheelParts as $wheelPartIndex => $wheelPart) +
+ @endforeach + @push('styles') + @foreach ($wheelParts as $wheelPartIndex => $wheelPart) + + @endforeach + @endpush +
+ +
+
+
+ +
+
+ +
+ +
+
+
+
+
diff --git a/views/pages/participation/parts/discount.blade.php b/views/pages/participation/parts/discount.blade.php new file mode 100644 index 0000000..1ff8095 --- /dev/null +++ b/views/pages/participation/parts/discount.blade.php @@ -0,0 +1,31 @@ +
+
+
+ {{ __('Votre bon de réduction de :value', ['value' => $discount->face_value]) }} +
+
+
+ {{ __("Félicitations\u{00A0}!") }} +

+ {{ __('Vous avez gagné un bon d\'achat de :amount € sur :product_name', [ + 'amount' => $discount->face_value, + 'product_name' => $discount->valid_on, + ]) }} +
+

+ +

{{ __("Vous possédez un autre code\u{00A0}?") }}

+ +
+
+
+
diff --git a/views/pages/participation/parts/prize.blade.php b/views/pages/participation/parts/prize.blade.php new file mode 100644 index 0000000..ed00c6c --- /dev/null +++ b/views/pages/participation/parts/prize.blade.php @@ -0,0 +1,41 @@ +
empty($noHide), +])> +
+
+ {{ $prizeModel->picture_alt }} +
+
+
$prizeModel->id % 2 === 0, + 'text-bg-tertiary' => $prizeModel->id % 2 === 1, + ])> + {{ __("Félicitations\u{00A0}!") }} +

+ {{ __('Vous avez gagné un :model !', [ + 'model' => $prizeModel->label, + ]) }} +
+ @if ($settingsGlobal->winning_proof) + {{ __('Pour recevoir votre cadeau, vous devez envoyer vos preuves d\'achat. Voir modalités ci dessous.') }} + @else + {{ __('Vous serez prochainement contacté via vos coordonnées d\'inscription pour recevoir votre lot.') }} + @endif +

+ @if ($settingsGlobal->winning_proof) + » + @endif +
+
+
+
diff --git a/views/pages/participation/parts/winning-proof-address.blade.php b/views/pages/participation/parts/winning-proof-address.blade.php new file mode 100644 index 0000000..600aa4e --- /dev/null +++ b/views/pages/participation/parts/winning-proof-address.blade.php @@ -0,0 +1,39 @@ +{{ __('Ou Par courrier') }} +

{!! clean( + __( + 'Merci de nous envoyer, sur papier libre :printLinkComment, vos coordonnées ainsi que vos preuves d\'achat originales. Le tout sous pli suffisamment affranchi sous dix jours à l\'adresse suivante :', + [ + // Optionnal winning proof pdf + 'printLinkComment' => optional($prizeModel ?? '')->pdf_winning_proof + ? __('(ou en utilisant le formulaire :startA téléchargeable ici :endA)', [ + 'startA' => + '', + 'endA' => '', + ]) + : '', + ], + ), +) !!} +

+
+ Service Consommateurs LDC
+ Jeu "Gau'loisirs"
+ CS 50925
+ 72302 SABLÉ SUR SARTHE CEDEX +
+{{ __("Avec\u{00A0}:") }} +
+
{{ __('Vos coordonnées') }}
+
{{ __('Nom, prénom, adresse complète') }}
+
{{ __('N° de téléphone et E-mail') }}
+
+
+
{{ __('Vos preuves d\'achat') }}
+
{{ __('Code-barres original du produit') }}
+
{{ __('Ticket de caisse original avec la date') }}
+
{{ __('Le sticker ou ou la partie de l\'emballage contenant le code unique de jeu (code visible)') }}
+
diff --git a/views/pages/participation/parts/winning-proof-form/coordinates.blade.php b/views/pages/participation/parts/winning-proof-form/coordinates.blade.php new file mode 100644 index 0000000..77b8eb2 --- /dev/null +++ b/views/pages/participation/parts/winning-proof-form/coordinates.blade.php @@ -0,0 +1,47 @@ +
+ {{ __('Vos coordonnées') }} + + {{-- Force next columns to break to new line --}} +
+ + {{-- FIRST_NAME --}} +
+ @include('theme::auth.partials.inputs.first_name', ['required' => true]) +
+ + {{-- LAST_NAME --}} +
+ @include('theme::auth.partials.inputs.last_name', ['required' => true]) +
+ + {{-- ADDRESS --}} +
+ @include('theme::auth.partials.inputs.address', ['required' => true]) +
+ + {{-- ADDRESS2 --}} +
+ @include('theme::auth.partials.inputs.address2') +
+ + {{-- POSTAL_CODE --}} +
+ @include('theme::auth.partials.inputs.postal_code', ['required' => true]) +
+ + {{-- CITY --}} +
+ @include('theme::auth.partials.inputs.city', ['required' => true]) +
+ + {{-- COUNTRY --}} +
+ @include('theme::auth.partials.inputs.country', ['required' => true]) +
+ + {{-- PHONE --}} +
+ @include('theme::auth.partials.inputs.phone', ['required' => true]) +
+ +
diff --git a/views/pages/participation/parts/winning-proof-form/proof.blade.php b/views/pages/participation/parts/winning-proof-form/proof.blade.php new file mode 100644 index 0000000..40e145a --- /dev/null +++ b/views/pages/participation/parts/winning-proof-form/proof.blade.php @@ -0,0 +1,70 @@ +
+ {{ __('Vos preuves d\'achat') }} + + {{-- Force next columns to break to new line --}} +
+ + {{-- FILE CODE --}} +
+ + $errors->has('barcode'), + ]) @class([ + 'form-control', + 'form-control-lg', + 'is-invalid' => $errors->has('barcode'), + ]) + accept=".jpg,.jpeg,.png,.pdf" required> + @foreach ($errors->get('barcode') as $message) +
{{ $message }}
+ @endforeach + {{ __('Image ou pdf, 2 Mo maximum') }} +
+ + {{-- Force next columns to break to new line --}} +
+ + {{-- FILE RECEIPT --}} +
+ + $errors->has('ticket'), + ]) @class([ + 'form-control', + 'form-control-lg', + 'is-invalid' => $errors->has('ticket'), + ]) + accept=".jpg,.jpeg,.png,.pdf" required> + @foreach ($errors->get('ticket') as $message) +
{{ $message }}
+ @endforeach + {{ __('Image ou pdf, 2 Mo maximum') }} +
+ + {{-- Force next columns to break to new line --}} +
+ + {{-- FILE STICKER --}} +
+ + $errors->has('sticker'), + ]) @class([ + 'form-control', + 'form-control-lg', + 'is-invalid' => $errors->has('sticker'), + ]) + accept=".jpg,.jpeg,.png,.pdf" required> + @foreach ($errors->get('sticker') as $message) +
{{ $message }}
+ @endforeach + {{ __('Image ou pdf, 2 Mo maximum') }} +
+ +
diff --git a/views/pages/participation/parts/winning-proof.blade.php b/views/pages/participation/parts/winning-proof.blade.php new file mode 100644 index 0000000..9c8fa0e --- /dev/null +++ b/views/pages/participation/parts/winning-proof.blade.php @@ -0,0 +1,57 @@ +
empty($noHide), +])> +
+
+ {{ __('Envoyez vos preuves de gain') }} +
+
+ +
+ {{-- ONLINE FORM --}} +
+
+ {{ __('En ligne @') }} + {{ __('Renseignez l\'adresse à laquelle vous souhaitez recevoir votre gain et téléversez vos preuves d\'achat.') }} +
+
+
+
+
+ @method('POST') + @csrf + + @include('theme::pages.participation.parts.winning-proof-form.coordinates') + @include('theme::pages.participation.parts.winning-proof-form.proof') + +
+
+ +
+
+
+
+ {{ __('*Champs obligatoires') }} +
+
+
+
+
+ + {{-- POSTAL INSTRUCTIONS --}} +
+
+ @include('theme::pages.participation.parts.winning-proof-address', [ + 'prizeModel' => $prizeModel, + ]) +
+
+
+ +
diff --git a/views/pages/participation/winning-participations.blade.php b/views/pages/participation/winning-participations.blade.php new file mode 100644 index 0000000..e9a72a1 --- /dev/null +++ b/views/pages/participation/winning-participations.blade.php @@ -0,0 +1,63 @@ +@extends('theme::layout') + +@section('title', __('Mes gains')) +@section('description', __('Les gains que j\'ai obtenu dans le jeu')) + +@section('main-class', 'product-page') + +@section('content') +
+
+
+

{{ __('Mes gains') }}

+
+
+ @foreach ($winningList as $participationModel) +
+
+ @if ($participationModel->relationLoaded('instantWin') and $participationModel->instantWin) +
+
+
{{ __('Lot :label', ['label' => $participationModel->instantWin->prize->label]) }} +
+ @can('submitProof', $participationModel) +

+ {{ __('Vous avez gagné ce lot et devez nous fournir les preuves de gains.') }} +

+ + {{ __('Aller sur le formulaire de preuves de gains') }} + + @include('theme::pages.participation.parts.winning-proof-address', [ + 'prizeModel' => $participationModel->instantWin->prize, + ]) + @else +

+ {{ __('Vous avez gagné ce lot et le receverez prochainenment par voie postale.') }} +

+ @endcan +
+
+ @endif + @if ($participationModel->relationLoaded('discount') and $participationModel->discount) +
+
+
{{ __('Bon de réduction') }} +
+

+ {{ __('Vous avez gagné un bon d\'achat, vous pouvez utiliser le lien ci-dessous pour l\'imprimer si ce n\'est pas déjà fait.') }}
+ {{ __('Pensez bien à allumer votre imprimante avant de cliquer sur le lien') }} +

+ {{ __('Imprimer ma réduction') }} +
+
+ @endif +
+
+ @endforeach +
+ +@endsection diff --git a/views/pages/participation/won-form-only.blade.php b/views/pages/participation/won-form-only.blade.php new file mode 100644 index 0000000..8253062 --- /dev/null +++ b/views/pages/participation/won-form-only.blade.php @@ -0,0 +1,27 @@ +@extends('theme::layout') + +@section('title', __('Vous avez gagné !')) +@section('description', __('Vous avez gagné un Lot, veuillez compléter le formulaire de preuve de gains')) + +@section('main-class', 'won-page g-0') +@section('content') + + {{-- LOT --}} + @include('theme::pages.participation.parts.prize', [ + 'noHide' => true, + 'sectionId' => 'prize-section', + 'prizeModel' => $prizeModel, + 'participationModel' => $participationModel, + 'winProofAnchor' => 'winning-proof-section', + ]) + + @if ($settingsGlobal->winning_proof and !empty($prizeModel)) + {{-- WINNING PROOF SUBMIT PART --}} + @include('theme::pages.participation.parts.winning-proof', [ + 'noHide' => true, + 'sectionId' => 'winning-proof-section', + 'participationModel' => $participationModel, + ]) + @endif + +@endsection diff --git a/views/pages/participation/won.blade.php b/views/pages/participation/won.blade.php new file mode 100644 index 0000000..cbc45ec --- /dev/null +++ b/views/pages/participation/won.blade.php @@ -0,0 +1,43 @@ +@extends('theme::layout') + +@section('title', __('Vous avez gagné !')) +@section('description', __('Vous avez gagné un Lot cliquez sur la roue pour découvrir lequel')) + +@section('main-class', 'won-page g-0') +@section('content') + + {{-- SPIN WHEEL --}} + @include('theme::pages.participation.parts.animation', [ + 'sectionId' => 'spin-animation', + 'winDiscount' => !empty($prizeModel) ? false : true, + 'prizeModel' => $prizeModel ?? null, + ]) + + @if (!empty($prizeModel)) + {{-- LOT --}} + @include('theme::pages.participation.parts.prize', [ + 'sectionId' => 'prize-section', + 'prizeModel' => $prizeModel, + 'winProofAnchor' => 'winning-proof-section', + ]) + @elseif (!empty($discount)) + {{-- COUPON --}} + @include('theme::pages.participation.parts.discount', [ + 'sectionId' => 'discount-section', + 'discount' => $discount, + ]) + @else + @php + throw new \RuntimeException('Unhandled win case'); + @endphp + @endif + + @if ($settingsGlobal->winning_proof and !empty($prizeModel)) + {{-- WINNING PROOF SUBMIT PART --}} + @include('theme::pages.participation.parts.winning-proof', [ + 'sectionId' => 'winning-proof-section', + 'participationModel' => $participationModel, + ]) + @endif + +@endsection diff --git a/views/pages/products.blade.php b/views/pages/products.blade.php new file mode 100644 index 0000000..58912c2 --- /dev/null +++ b/views/pages/products.blade.php @@ -0,0 +1,34 @@ +@extends('theme::layout') + +@section('title', __('Produits porteurs')) +@section('description', __('Les produits porteurs de l\'offre du jeu')) + +@section('main-class', 'product-page') + +@section('content') +
+
+
+

{{ __('Les produits porteurs') }}

+
+
+
+
+
+ @foreach ($rangeModelList as $rangeModel) + @foreach ($rangeModel->products as $productModel) + + @endforeach + @endforeach +
+
+
+
+@endsection diff --git a/views/pages/static_page.blade.php b/views/pages/static_page.blade.php new file mode 100644 index 0000000..169c1d2 --- /dev/null +++ b/views/pages/static_page.blade.php @@ -0,0 +1,22 @@ +@extends('theme::layout') + +@section('title', $staticPageModel->seo_title) +@section('description', $staticPageModel->seo_description) + +@section('main-class', 'static-page') +@section('content') +
+
+
+

{{ $staticPageModel->title }}

+
+
+
+
+
+ {!! $staticPageModel->content !!} +
+
+
+
+@endsection diff --git a/views/pages/teaser.blade.php b/views/pages/teaser.blade.php new file mode 100644 index 0000000..35698c6 --- /dev/null +++ b/views/pages/teaser.blade.php @@ -0,0 +1,117 @@ +@extends('theme::layout-teaser') + +@section('description', __('Le jeu :site_name vas bientôt ouvrir', ['site_name' => $settingsGlobal->name])) + +@section('main-class', 'teaser-page') +@section('content') +
+
+
+

+ {{ __('Du :start_date au :end_date jouez et tentez de gagner', [ + 'start_date' => $settingsGlobal->start_date->isoFormat('DD MMMM'), + 'end_date' => $settingsGlobal->end_date->isoFormat('DD MMMM'), + ]) }} +

+
+
+
+
+ {{ __('Une famille en canoe') }} +
+
+
+
+
+

{{ __('Jouez et tentez de gagner') }}

+
+
+ @if (collect($prizesGlobal)->count()) +
+ @if (Arr::has($prizesGlobal, 0)) +
+
+
+ {{ optional(Arr::get($prizesGlobal, 0))->quantity }} +
+

+ @if (intval(Arr::get($prizesGlobal, 0)->quantity) > 1) + {{ Str::plural(Arr::get($prizesGlobal, 0)->label) }} + @else + {{ Arr::get($prizesGlobal, 0)->label }} + @endif +

+
+ {{ Arr::get($prizesGlobal, 0)->picture_alt }} +
+ @endif + @if (Arr::has($prizesGlobal, 1)) +
+
+
+ {{ optional(Arr::get($prizesGlobal, 1))->quantity }} +
+

+ @if (intval(Arr::get($prizesGlobal, 1)->quantity) > 1) + {{ Str::plural(Arr::get($prizesGlobal, 1)->label) }} + @else + {{ Arr::get($prizesGlobal, 1)->label }} + @endif +

+
+ {{ Arr::get($prizesGlobal, 1)->picture_alt }} +
+ {!! clean(nl2br(__("Ou des milliers\n de bons\n de réduction"))) !!} + {{ __('Réduction de 1 euro') }} +
+
+ @endif +
+ @endif +
+
+ @php + $counterParts = explode( + '#', + $settingsGlobal->start_date->diffForHumans([ + 'syntax' => \Carbon\CarbonInterface::DIFF_ABSOLUTE, + 'parts' => 3, + 'join' => '#', + ]), + ); + @endphp + @if (collect($counterParts)->count()) +

+ {{ __('Votre jeu sera ouvert dans :time', ['time' => '']) }} + + @foreach ($counterParts as $counterPart) + + + + {{ Str::of($counterPart)->before(' ')->padLeft(2, '0') }} + + + {{ Str::of($counterPart)->after(' ')->padBoth(8, "\u{00A0}") }} + + @endforeach + +

+ @endif +
+
+
+ {{ __('Grand jeu 100% gagnant') }} +
+
+
+@endsection diff --git a/views/partials/icons/facebook.blade.php b/views/partials/icons/facebook.blade.php new file mode 100644 index 0000000..af2f46d --- /dev/null +++ b/views/partials/icons/facebook.blade.php @@ -0,0 +1,10 @@ + + {{ __('Page Facebook :company', ['company' => $settingsGlobal->company]) }} + + + + diff --git a/views/partials/icons/instagram.blade.php b/views/partials/icons/instagram.blade.php new file mode 100644 index 0000000..4e304d9 --- /dev/null +++ b/views/partials/icons/instagram.blade.php @@ -0,0 +1,17 @@ + + {{ __('Page Instagram :company', ['company' => $settingsGlobal->company]) }} + + + + + + + + + + diff --git a/views/partials/icons/up-arrow.blade.php b/views/partials/icons/up-arrow.blade.php new file mode 100644 index 0000000..309f332 --- /dev/null +++ b/views/partials/icons/up-arrow.blade.php @@ -0,0 +1,6 @@ + + {{ __('Flèche pointant en direction du haut de la page') }} + + + + diff --git a/views/vendor/cn-cookies.blade.php b/views/vendor/cn-cookies.blade.php new file mode 100644 index 0000000..93ebf89 --- /dev/null +++ b/views/vendor/cn-cookies.blade.php @@ -0,0 +1,100 @@ +{{-- blade-formatter-disable --}} +@php + +$site_name = Str::ucfirst(config('app.name')); +$logo_picture_url = Vite::asset('resources/theme/mounted/assets/images/home_logo.png'); +$logo_title_text = __('Logo du site :name', ['name' => $site_name]); +$logo_alt_text = __('Logo :name', ['name' => $site_name]); +$confidentiality_page_url = route('fo.charte'); + +$strings = (object)[ + 'modal_title' => __('Fenetre de gestion de cookies'), + 'button_customize_cookies' => __('cookie-notice.button_customize_cookies'), + 'button_close_cookies' => __('cookie-notice.button_close_cookies'), + 'button_forbid' => __('cookie-notice.button_forbid'), + 'button_allow' => __('cookie-notice.button_allow'), + 'button_forbid_all' => Str::upper(__('cookie-notice.button_forbid_all')), + 'button_allow_all' => Str::upper(__('cookie-notice.button_allow_all')), + 'button_customize' => Str::upper(__('cookie-notice.button_customize')), + 'button_forbid_all_title' => __('cookie-notice.button_forbid_all_title'), + 'button_allow_all_title' => __('cookie-notice.button_allow_all_title'), + 'button_back' => Str::upper(__('cookie-notice.button_back')), + 'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]), + 'banner_text_open' => __('cookie-notice.banner_text_open', ['site_name' => $site_name]), + 'banner_text' => __('cookie-notice.banner_text'), + 'banner_details' => __('cookie-notice.banner_details'), + 'banner_details_link' => __('cookie-notice.banner_details_link'), + 'banner_details_link_title' => __('cookie-notice.banner_details_link_title'), + 'banner_more_details' => __('cookie-notice.banner_more_details'), + 'banner_less_details' => __('cookie-notice.banner_less_details'), + 'Panel_title' => __('cookie-notice.Panel_title'), + 'Panel_content' => __('cookie-notice.Panel_content'), + 'Panel_subtitle' => __('cookie-notice.Panel_subtitle'), + 'Panel_details' => __('cookie-notice.Panel_details'), + 'picture_cookie_title' => __('Image d\'un bon gros cookie'), + 'navigation_title' => __('Navigation du panneau des cookie'), +]; + +$cookies = []; + +// MATOMO +$cookies['matomo'] = [ + 'name' => __('cookie-notice.custom.matomo.title'), + 'description' => __('cookie-notice.custom.matomo.description'), + 'link' => 'https://fr.matomo.org/gdpr-analytics/', + 'labelLink' => __('En savoir +'), + 'cookies' => ['_pk'] +]; + +$cookies['matomo']['script'] = << +@endpush diff --git a/views/vendor/cookie-notice-templates/standard.blade.php b/views/vendor/cookie-notice-templates/standard.blade.php new file mode 100644 index 0000000..c17f9b4 --- /dev/null +++ b/views/vendor/cookie-notice-templates/standard.blade.php @@ -0,0 +1,94 @@ +
+ + {{-- BANNER --}} +
+
+ +
+ {{-- CONTENT VIEW --}} +
+ {{-- 1ST PAGE BANNER --}} +
+
+ {{ $logo_alt_text }} +
+
+
+ {!! nl2br(e($strings->banner_title)) !!} +
+
+

{!! nl2br(e($strings->banner_text)) !!}

+

{!! nl2br(e($strings->banner_text_open)) !!}

+
+
+
+

+ {!! nl2br(e($strings->banner_details)) !!}
+ {{ $strings->banner_details_link }} +

+
+
+ +
+
+ {{-- 2ND PAGE CUSTOMIZE PANEL --}} +
+

{{ $strings->Panel_title }}

+

{!! nl2br(e($strings->Panel_subtitle)) !!}

+

{!! nl2br(e($strings->Panel_details)) !!}

+
+ {{-- COOKIES LIST --}} +
    +
    +
    +
    + {{-- NAV BAR --}} + + + {{-- COOKIE LIST LI TEMPLATE --}} +
    + +
    +
    +
    diff --git a/views/vendor/errors/404.blade.php b/views/vendor/errors/404.blade.php new file mode 100644 index 0000000..d3fa028 --- /dev/null +++ b/views/vendor/errors/404.blade.php @@ -0,0 +1,12 @@ +@extends('errors::illustrated-layout') + +@section('title', __('Not Found')) +@section('code', '404') +@section('message', __('Not Found')) +@section('submessage', __('Ce n\'est pas la page que vous recherchez...')) + +@section('button', true) + +@section('image') + +@endsection diff --git a/views/vendor/errors/503.blade.php b/views/vendor/errors/503.blade.php new file mode 100644 index 0000000..65cc481 --- /dev/null +++ b/views/vendor/errors/503.blade.php @@ -0,0 +1,10 @@ +@extends('errors::illustrated-layout') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) +@section('submessage', __('Le site est en maintenance, nous reviendrons...')) + +@section('image') + +@endsection diff --git a/views/vendor/mail/html/header.blade.php b/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..581b3f7 --- /dev/null +++ b/views/vendor/mail/html/header.blade.php @@ -0,0 +1,13 @@ + + + + @if (trim($slot) === 'Laravel') + + @else + + {{ $slot }} + @endif + + +