| @ -0,0 +1,184 @@ | |||
| package com.example.demo.controllers; | |||
| import com.example.demo.Dominio; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.ui.Model; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import java.net.MalformedURLException; | |||
| import java.time.LocalDateTime; | |||
| import java.time.format.DateTimeFormatter; | |||
| import java.util.Optional; | |||
| /** Para esto caso con UN SOLO CONTROLADOR es suficiente */ | |||
| @Controller | |||
| public class MainController { | |||
| Dominio dom; | |||
| public void buscaURL() throws MalformedURLException { | |||
| this.dom = new Dominio(); | |||
| } | |||
| /** TRANSMITIMOS A LOS HTMLS - getMapping DICE A CUALES*/ | |||
| @GetMapping({"","/","/home","/inicio","/index"}) | |||
| public String welcome(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("content_1p", | |||
| """ | |||
| ¿Cuantas veces tienes ese tipo de días que quieres ver una película pero no sabes cual ver? | |||
| """); | |||
| model.addAttribute("content_2p", | |||
| """ | |||
| ¿Cuantas veces te has perdido en inmensos catalogos? | |||
| """); | |||
| model.addAttribute("content_3p", | |||
| """ | |||
| Este es tu sitio ideal. | |||
| """); | |||
| model.addAttribute("title", "La Filmoteca - Inicio"); | |||
| model.addAttribute("url", dom.getUrl()); | |||
| return "index"; | |||
| } | |||
| @GetMapping({"/sobre_nosotros"}) | |||
| public String sobre(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("content_1p", """ | |||
| En La Filmoteca acercamos de una manera intuitiva las mejores películas de la historia según nuestros expertos y | |||
| las más prestigiosas publicaciones de este arte. | |||
| Prometemos acercarnos al visitante de una manera intuitiva y educadora. | |||
| """); | |||
| model.addAttribute("content_2p", """ | |||
| Nos comprometemos a que nuestros visitantes puedan escoger cualquier apartado del forma más simple, | |||
| sin colmar su paciencia haciendo que estos mismo recomienden dicha página a sus amigos. | |||
| Con una estética simple y minimalista, haremos que cada visitante confíe en nosotros. | |||
| """); | |||
| model.addAttribute("content_3p", """ | |||
| Alejandro Javier Albus -- cc 2022 | |||
| Aviso legal: | |||
| Todas las imágenes de las películas son propiedad de sus respectivas productoras y/o autores. | |||
| Las descripciones y atributos de las películas han sido extraídas de la web de FilmAffinity | |||
| """); | |||
| model.addAttribute("title", "La Filmoteca - Sobre"); | |||
| model.addAttribute("url", dom.getUrl()); | |||
| return "sections/sobre_nosotros"; | |||
| } | |||
| @GetMapping({"/nuestra_seleccion"}) | |||
| public String nuestraSeleccion(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("content","Presentamos la selección completa..."); | |||
| model.addAttribute("title", "La Filmoteca - Nuestra Seleccion"); | |||
| model.addAttribute("url", dom.getUrl()); | |||
| return "sections/nuestra_seleccion"; | |||
| } | |||
| @GetMapping({"/escribir_resenya"}) | |||
| public String escribeResenya(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("content","Presentamos la selección completa..."); | |||
| model.addAttribute("title", "La Filmoteca - Escribir reseña"); | |||
| model.addAttribute("url", dom.getUrl()); | |||
| return "sections/escribir_resenya"; | |||
| } | |||
| @GetMapping({"/pelicula_elegida"}) | |||
| public String peliculaElegida(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo", "1917"); | |||
| return "sections/pelicula_elegida"; | |||
| } | |||
| /** No es necesario hacer una pagina para cada genero */ | |||
| @GetMapping({"/generos"}) | |||
| public String generos(Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("content","Presentamos los géneros disponibles..."); | |||
| model.addAttribute("title", "La Filmoteca - Géneros"); | |||
| model.addAttribute("url", dom.getUrl()); | |||
| return "sections/generos"; | |||
| } | |||
| @GetMapping("/hora") | |||
| public String hora(Model model) { | |||
| DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); | |||
| model.addAttribute("fechahora",dtf.format(LocalDateTime.now())); | |||
| DateTimeFormatter hora = DateTimeFormatter.ofPattern("HH"); | |||
| int ihora = Integer.parseInt(hora.format(LocalDateTime.now())); | |||
| String background="claro"; | |||
| if (ihora >= 20 || ihora <= 7 ) { | |||
| background="oscuro"; | |||
| } | |||
| model.addAttribute("background",background); | |||
| return "hora"; | |||
| } | |||
| @GetMapping("/parametros") | |||
| public String parametros (Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo", "Propiedades del servidor y URL"); | |||
| model.addAttribute("addr",dom.getAddr()); | |||
| model.addAttribute("hostnameCanonical",dom.getCanonnical()); | |||
| model.addAttribute("hostname",dom.getHostname()); | |||
| model.addAttribute("address",dom.getAddr()); | |||
| /* importante */ | |||
| model.addAttribute("url",dom.getUrl()); | |||
| model.addAttribute("port",dom.getPuerto()); | |||
| model.addAttribute("host",dom.getHostname()); | |||
| model.addAttribute("protocol",dom.getProtocolo()); | |||
| model.addAttribute("path",dom.getPath()); | |||
| model.addAttribute("query",dom.getQuery()); | |||
| model.addAttribute("dominio",dom.getDominio()); | |||
| model.addAttribute("tld",dom.getTld()); | |||
| return("pruebas/parametros"); | |||
| } | |||
| /** | |||
| * 127.0.0.1 dominio1.es.tipo1 | |||
| * 127.0.0.1 dominio2.es.tipo1 | |||
| * 127.0.0.1 dominio1.es.tipo2 | |||
| * 127.0.0.1 dominio2.es.tipo2 | |||
| */ | |||
| /* backend */ | |||
| @GetMapping({"/springsecurity/{usuario}","/springsecurity"}) | |||
| public String springsecurity(@PathVariable(name="usuario", required = false) String usuario, Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo","Panel de control security"); | |||
| model.addAttribute("usuario",usuario); | |||
| return "springsecurity/login"; | |||
| } | |||
| /*@GetMapping({"/logout","/salir"}) | |||
| public String logout( Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo","Panel de control security"); | |||
| return "springsecurity/logout"; | |||
| }*/ | |||
| /* url amigable */ | |||
| @GetMapping({"/entrar/{usuario}","/entrar","/usuario/{usuario}","/usuario"}) | |||
| public String login(@PathVariable(name="usuario", required = false) String usuario, | |||
| Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo","Panel de control"); | |||
| model.addAttribute("usuario",usuario); | |||
| return "backend/login"; | |||
| } | |||
| /* admin */ | |||
| @GetMapping({"/admin","/intranet","/login"}) | |||
| public String admin(@RequestParam("usuario") Optional<String> usuario, | |||
| Model model) throws MalformedURLException { | |||
| this.buscaURL(); | |||
| model.addAttribute("titulo","Intranet"); | |||
| model.addAttribute("usuario",usuario.orElse("")); | |||
| return "admin/login"; | |||
| } | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| function toggleResetPswd(e){ | |||
| e.preventDefault(); | |||
| $('#logreg-forms .form-signin').toggle() // display:block or none | |||
| $('#logreg-forms .form-reset').toggle() // display:block or none | |||
| } | |||
| function toggleSignUp(e){ | |||
| e.preventDefault(); | |||
| $('#logreg-forms .form-signin').toggle(); // display:block or none | |||
| $('#logreg-forms .form-signup').toggle(); // display:block or none | |||
| } | |||
| $(()=>{ | |||
| // Login Register Form | |||
| $('#logreg-forms #forgot_pswd').click(toggleResetPswd); | |||
| $('#logreg-forms #cancel_reset').click(toggleResetPswd); | |||
| $('#logreg-forms #btn-signup').click(toggleSignUp); | |||
| $('#logreg-forms #cancel_signup').click(toggleSignUp); | |||
| }) | |||
| @ -0,0 +1,24 @@ | |||
| @charset "UTF-8"; | |||
| .login-block{ | |||
| background: #DE6262; /* fallback for old browsers */ | |||
| background: -webkit-linear-gradient(to bottom, #FFB88C, #DE6262); /* Chrome 10-25, Safari 5.1-6 */ | |||
| background: linear-gradient(to bottom, #FFB88C, #DE6262); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ | |||
| float:left; | |||
| width:100%; | |||
| padding : 50px 0; | |||
| } | |||
| .banner-sec{background:url(https://static.pexels.com/photos/33972/pexels-photo.jpg) no-repeat left bottom; background-size:cover; min-height:500px; border-radius: 0 10px 10px 0; padding:0;} | |||
| .container{background:#fff; border-radius: 10px; box-shadow:15px 20px 0px rgba(0,0,0,0.1);} | |||
| .carousel-inner{border-radius:0 10px 10px 0;} | |||
| .carousel-caption{text-align:left; left:5%;} | |||
| .login-sec{padding: 50px 30px; position:relative;} | |||
| .login-sec .copy-text{position:absolute; width:80%; bottom:20px; font-size:13px; text-align:center;} | |||
| .login-sec .copy-text i{color:#FEB58A;} | |||
| .login-sec .copy-text a{color:#E36262;} | |||
| .login-sec h2{margin-bottom:30px; font-weight:800; font-size:30px; color: #DE6262;} | |||
| .login-sec h2:after{content:" "; width:100px; height:5px; background:#FEB58A; display:block; margin-top:20px; border-radius:3px; margin-left:auto;margin-right:auto} | |||
| .btn-login{background: #DE6262; color:#fff; font-weight:600;} | |||
| .banner-text{width:70%; position:absolute; bottom:40px; padding-left:20px;} | |||
| .banner-text h2{color:#fff; font-weight:600;} | |||
| .banner-text h2:after{content:" "; width:100px; height:5px; background:#FFF; display:block; margin-top:20px; border-radius:3px;} | |||
| .banner-text p{color:#fff;} | |||
| @ -0,0 +1,37 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <title th:text="${titulo}">Título de la página</title> | |||
| <meta name="description" content=""> | |||
| <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | |||
| <link href="/webjars/font-awesome/css/all.css" rel="stylesheet"> | |||
| <link href="/css/adminlogin.css" rel="stylesheet"> | |||
| </head> | |||
| <body> | |||
| <div class="main"> | |||
| <div class="container"> | |||
| <div class="middle"> | |||
| <div id="login"> | |||
| <form action="javascript:void(0);" method="get"> | |||
| <fieldset class="clearfix"> | |||
| <p ><span class="fa fa-user"></span><input type="text" Placeholder="Usuario" required th:value="${usuario}"></p> <!-- JS because of IE support; better: placeholder="Username" --> | |||
| <p><span class="fa fa-lock"></span><input type="password" Placeholder="Contraseña" required></p> <!-- JS because of IE support; better: placeholder="Password" --> | |||
| <div> | |||
| <span style="width:48%; text-align:left; display: inline-block;"><a class="small-text" href="#">¿Has olvidado la contraseña?</a></span> | |||
| <span style="width:50%; text-align:right; display: inline-block;"><input type="submit" value="Entrar"></span> | |||
| </div> | |||
| </fieldset> | |||
| </form> | |||
| </div> <!-- end login --> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,73 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" | |||
| xmlns="http://www.w3.org/1999/xhtml" | |||
| xmlns:th="http://www.thymeleaf.org"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <title th:text="${titulo}">Título de la página</title> | |||
| <meta name="description" content=""> | |||
| <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | |||
| <link href="/webjars/font-awesome/css/all.css" rel="stylesheet"> | |||
| <link href="/css/login.css" rel="stylesheet"> | |||
| </head> | |||
| <body > | |||
| <section class="login-block"> | |||
| <section class="vh-100"> | |||
| <div class="container py-5 h-100"> | |||
| <div class="row d-flex align-items-center justify-content-center h-100"> | |||
| <div class="col-md-8 col-lg-7 col-xl-6"> | |||
| <img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-login-form/draw2.svg" | |||
| class="img-fluid" alt="Phone image"> | |||
| </div> | |||
| <div class="col-md-7 col-lg-5 col-xl-5 offset-xl-1"> | |||
| <form> | |||
| <!-- Email input --> | |||
| <div class="form-outline mb-4"> | |||
| <input type="email" id="form1Example13" class="form-control form-control-lg" /> | |||
| <label class="form-label" for="form1Example13">Email address</label> | |||
| </div> | |||
| <!-- Password input --> | |||
| <div class="form-outline mb-4"> | |||
| <input type="password" id="form1Example23" class="form-control form-control-lg" /> | |||
| <label class="form-label" for="form1Example23">Password</label> | |||
| </div> | |||
| <div class="d-flex justify-content-around align-items-center mb-4"> | |||
| <!-- Checkbox --> | |||
| <div class="form-check"> | |||
| <input class="form-check-input" type="checkbox" value="" id="form1Example3" checked /> | |||
| <label class="form-check-label" for="form1Example3"> Remember me </label> | |||
| </div> | |||
| <a href="#!">Forgot password?</a> | |||
| </div> | |||
| <!-- Submit button --> | |||
| <button type="submit" class="btn btn-primary btn-lg btn-block">Entrar</button> | |||
| <div class="divider d-flex align-items-center my-4"> | |||
| <p class="text-center fw-bold mx-3 mb-0 text-muted">OR</p> | |||
| </div> | |||
| <a class="btn btn-primary btn-lg btn-block" style="background-color: #3b5998" href="#!" | |||
| role="button"> | |||
| <i class="fab fa-facebook-f me-2"></i>Continue with Facebook | |||
| </a> | |||
| <a class="btn btn-primary btn-lg btn-block" style="background-color: #55acee" href="#!" | |||
| role="button"> | |||
| <i class="fab fa-twitter me-2"></i>Continue with Twitter</a> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </section> | |||
| <script src="webjars/jsquery/jquery.min.js"></script> | |||
| <script src="webjars/bootstrap/js/bootstrap.bundle.min.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,20 @@ | |||
| <div th:fragment="listado" class="flex-shrink-0"> | |||
| <h1>Listado de películas disponibles</h1> | |||
| <table class="table"> | |||
| <thead> | |||
| <tr> | |||
| <th>ID</th> | |||
| <th>Nombre</th> | |||
| <th>Email</th> | |||
| <th>Teléfono</th> | |||
| </thead> | |||
| <tbody> | |||
| <tr th:each="empleado : ${listaEmpleados}"> | |||
| <td th:text="${empleado.id}">ID</td> | |||
| <td th:text="${empleado.nombre}">Pepe Pérez</td> | |||
| <td th:text="${empleado.email}">[email protected]</td> | |||
| <td th:text="${empleado.telefono}">954000000</td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| @ -0,0 +1,138 @@ | |||
| <div th:fragment="index" class="flex-shrink-0"> | |||
| <div class="container" style = "text-align: center;"> | |||
| <h1 style = "margin-top: 3%; margin-bottom: 2%"> ¡Bienvenidos a La Filmoteca! </h1> | |||
| <p th:text="${content_1p}" style = "font-style: italic;"></p> | |||
| </div> | |||
| <div class="container my-5"> | |||
| </div> | |||
| </div> | |||
| <div th:fragment="sobre_nosotros" class="flex-shrink-0"> | |||
| <div class="container" style = "text-align: center; margin: 5%;"> | |||
| <div class="card text-center"> | |||
| <div class="card-header"> | |||
| Sobre nosotros | |||
| </div> | |||
| <div class="card-body"> | |||
| <h5 class="card-title" th:text="${content_1p}" style = "font-style: italic;"></h5> | |||
| <p class="card-text" th:text="${content_2p}" style = "font-style: italic;"></p> | |||
| <p class="card-text" th:text="${content_3p}" style = "font-size: smaller; font-style: italic;"></p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div th:fragment="escribir_resenya" style="margin: 5% 20% 2%;"> | |||
| <form> | |||
| <h3>Yo opino que...</h3> | |||
| <div class="mb-3"> | |||
| <input type="email" class="form-control" id="pelicula" aria-describedby="emailHelp"> | |||
| <div id="emailHelp" class="form-text"> Título de la reseña </div> | |||
| </div> | |||
| <div class="form-floating"> | |||
| <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea> | |||
| <label for="floatingTextarea"> </label> | |||
| </div> | |||
| <button type="submit" class="btn btn-primary" style="background-color: black; margin-top: 1%;"> Enviar </button> | |||
| </form> | |||
| </div> | |||
| <div th:fragment="generos" class="flex-shrink-0"> | |||
| <div class="container" style = "text-align: center; margin: 5%;"> | |||
| <div class="card mb-3"> | |||
| <img src="/img/manchesterbythesea.png" class="card-img-top" alt="..."> | |||
| <div class="card-body"> | |||
| <h5 class="card-title" href="/generos/genero_drama">Drama</h5> | |||
| <p class="card-text">Películas en que prevalecen acciones y situaciones tensas y pasiones conflictivas.</p> | |||
| </div> | |||
| </div> | |||
| <div class="card mb-3"> | |||
| <img src="/img/miradaindiscreta.png" class="card-img-bottom" alt="..."> | |||
| <div class="card-body"> | |||
| <h5 class="card-title">Thriller</h5> | |||
| <p class="card-text">Películas con una trama emocionante que mantiene al espectador en constante suspenso.</p> | |||
| </div> | |||
| </div> | |||
| <div class="card mb-3"> | |||
| <img src="/img/waterloo.png" class="card-img-bottom" alt="..."> | |||
| <div class="card-body"> | |||
| <h5 class="card-title">Épica</h5> | |||
| <p class="card-text">Películas que resultan impresionantes y/o majestuosas.</p> | |||
| </div> | |||
| </div> | |||
| <div class="card mb-3"> | |||
| <img src="/img/enterthevoid.png" class="card-img-bottom" alt="..."> | |||
| <div class="card-body"> | |||
| <h5 class="card-title">Miscelánea</h5> | |||
| <p class="card-text">Películas que no encajan en las categorías anteriormente mencionadas.</p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div th:fragment="nuestra_seleccion" class="flex-shrink-0"> | |||
| <div class="container" style = "text-align: center; margin: 5%;"> | |||
| <h1 style = "margin-top: 5%"> Nuestra selección </h1> | |||
| <hr> | |||
| <ol class="list-group list-group-numbered"> | |||
| <li class="list-group-item d-flex justify-content-between align-items-start"> | |||
| <div class="ms-2 me-auto"> | |||
| <div class="fw-bold">1917</div> | |||
| Sam Mendes | |||
| </div> | |||
| <span class="badge rounded-pill" style="background-color: red; margin-right: 1%"><a style="color: white;" href="/escribir_resenya">Manda un email</a></span> | |||
| <span class="badge bg-primary rounded-pill"><a style="color: white;" href="/escribir_resenya">Escribe una reseña</a></span> | |||
| </li> | |||
| <li class="list-group-item d-flex justify-content-between align-items-start"> | |||
| <div class="ms-2 me-auto"> | |||
| <div class="fw-bold">Interstellar</div> | |||
| Cristopher Nolan | |||
| </div> | |||
| <span class="badge rounded-pill" style="background-color: red; margin-right: 1%"><a style="color: white;" href="/escribir_resenya">Manda un email</a></span> | |||
| <span class="badge bg-primary rounded-pill"><a style="color: white;" href="/escribir_resenya">Escribe una reseña</a></span> | |||
| </li> | |||
| <li class="list-group-item d-flex justify-content-between align-items-start"> | |||
| <div class="ms-2 me-auto"> | |||
| <div class="fw-bold">Goodfellas</div> | |||
| Martin Scorsese | |||
| </div> | |||
| <span class="badge rounded-pill" style="background-color: red; margin-right: 1%"><a style="color: white;" href="/escribir_resenya">Manda un email</a></span> | |||
| <span class="badge bg-primary rounded-pill"><a style="color: white;" href="/escribir_resenya">Escribe una reseña</a></span> | |||
| </li> | |||
| <li class="list-group-item d-flex justify-content-between align-items-start"> | |||
| <div class="ms-2 me-auto"> | |||
| <div class="fw-bold">Goodfellas</div> | |||
| Martin Scorsese | |||
| </div> | |||
| <span class="badge rounded-pill" style="background-color: red; margin-right: 1%"><a style="color: white;" href="/escribir_resenya">Manda un email</a></span> | |||
| <span class="badge bg-primary rounded-pill"><a style="color: white;" href="/escribir_resenya">Escribe una reseña</a></span> | |||
| </li> | |||
| <li class="list-group-item d-flex justify-content-between align-items-start"> | |||
| <div class="ms-2 me-auto"> | |||
| <div class="fw-bold">Goodfellas</div> | |||
| Martin Scorsese | |||
| </div> | |||
| <span class="badge rounded-pill" style="background-color: red; margin-right: 1%"><a style="color: white;" href="/escribir_resenya">Manda un email</a></span> | |||
| <span class="badge bg-primary rounded-pill"><a style="color: white;" href="/escribir_resenya">Escribe una reseña</a></span> | |||
| </li> | |||
| </ol> | |||
| <br> | |||
| <nav aria-label="Page navigation example"> | |||
| <ul class="pagination"> | |||
| <li class="page-item"> | |||
| <a class="page-link" href="#" aria-label="Previous"> | |||
| <span aria-hidden="true">«</span> | |||
| </a> | |||
| </li> | |||
| <li class="page-item"><a class="page-link" href="#">1</a></li> | |||
| <li class="page-item"><a class="page-link" href="#">2</a></li> | |||
| <li class="page-item"><a class="page-link" href="#">3</a></li> | |||
| <li class="page-item"> | |||
| <a class="page-link" href="#" aria-label="Next"> | |||
| <span aria-hidden="true">»</span> | |||
| </a> | |||
| </li> | |||
| </ul> | |||
| </nav> | |||
| </div> | |||
| </div> | |||
| @ -0,0 +1,92 @@ | |||
| <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> | |||
| <html lang="es" | |||
| xmlns="http://www.w3.org/1999/xhtml" | |||
| xmlns:th="http://www.thymeleaf.org"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||
| <title th:text="${titulo}">Título de la página</title> | |||
| <meta name="description" content=""> | |||
| <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | |||
| <link href="/webjars/font-awesome/css/all.css" rel="stylesheet"> | |||
| <link href="/css/login.css" rel="stylesheet"> | |||
| </head> | |||
| <body > | |||
| <section class="login-block"> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-md-4 login-sec"> | |||
| <h2 class="text-center"><i class="fa-solid fa-key"></i> Panel de Control</h2> | |||
| <p th:if="${loginError}" class="error">Wrong user or password</p> | |||
| <form class="login-form" th:action="@{/springsecurity}" method="post"> | |||
| <div class="form-group"> | |||
| <label for="username"><i class="fa-solid fa-envelope fa-fade"></i> e-Mail</label> | |||
| <input id="username" name="username" type="text" class="form-control" placeholder="escribe tu email" th:value="${usuario}"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label for="password"><i class="fa-solid fa-lock fa-fade"></i> Contraseña</label> | |||
| <input id="password" name="password" type="password" class="form-control" placeholder="" required> | |||
| </div> | |||
| <div class="form-check"> | |||
| <label class="form-check-label"> | |||
| <input type="checkbox" class="form-check-input"> | |||
| <small>Recordar</small> | |||
| </label> | |||
| <button type="submit" class="btn btn-login float-right">Entrar</button> | |||
| </div> | |||
| </form> | |||
| <div class="copy-text">Created with <i class="fa fa-heart"></i> by Grafreez</div> | |||
| </div> | |||
| <div class="col-md-8 banner-sec"> | |||
| <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> | |||
| <ol class="carousel-indicators"> | |||
| <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> | |||
| <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> | |||
| <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> | |||
| </ol> | |||
| <div class="carousel-inner" role="listbox"> | |||
| <div class="carousel-item active"> | |||
| <img class="d-block img-fluid" src="https://static.pexels.com/photos/33972/pexels-photo.jpg" alt="First slide"> | |||
| <div class="carousel-caption d-none d-md-block"> | |||
| <div class="banner-text"> | |||
| <h2>This is Heaven</h2> | |||
| <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation</p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="carousel-item"> | |||
| <img class="d-block img-fluid" src="https://images.pexels.com/photos/7097/people-coffee-tea-meeting.jpg" alt="First slide"> | |||
| <div class="carousel-caption d-none d-md-block"> | |||
| <div class="banner-text"> | |||
| <h2>This is Heaven</h2> | |||
| <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation</p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="carousel-item"> | |||
| <img class="d-block img-fluid" src="https://images.pexels.com/photos/872957/pexels-photo-872957.jpeg" alt="First slide"> | |||
| <div class="carousel-caption d-none d-md-block"> | |||
| <div class="banner-text"> | |||
| <h2>This is Heaven</h2> | |||
| <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation</p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| <script src="webjars/jsquery/jquery.min.js"></script> | |||
| <script src="webjars/bootstrap/js/bootstrap.bundle.min.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,10 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="UTF-8"> | |||
| <title>Title</title> | |||
| </head> | |||
| <body> | |||
| salir | |||
| </body> | |||
| </html> | |||