Resolviendo errores y ajustando las tablas, los elemntos keywords y skills. He encontrado fallo de renovar datos de empresa, insisted que cambiamos los id id de empresa por algun la pero no puede encotrar por donde como al guardar el id es correcto.

master
vicsash 4 months ago
parent 31eed8f958
commit af0e7f5c69

@ -199,8 +199,6 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption,
Model model) throws ParseException {
System.out.println("Query: TEST " + query);
System.out.println("SecondaryOption: TEST " + secondaryOption);
String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
@ -237,7 +235,6 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption,
Model model) {
String[] word = query.split("\\b(y|o)\\b|[,/]");
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>();
if (secondaryOption.equalsIgnoreCase("Todo")){
@ -260,7 +257,6 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption,
Model model) throws ParseException {
System.out.println("Query: TEST " + query);
String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {

@ -19,9 +19,6 @@ import java.util.Optional;
@Controller
public class LogOutController {
@Autowired
private UsuarioService usuarioService;
@Autowired
private UserRepository userRepository;

@ -66,7 +66,6 @@ public class ContactoController {
}
}
@RolesAllowed({"ADMIN"})
@GetMapping("/admin/contacto/update/{id}")
public String showUpdateForm(Model model, @PathVariable Long id,Authentication authentication) {
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
@ -111,7 +110,7 @@ public class ContactoController {
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
}
try{
empresaService.deleteById(id);
contactosService.deleteById(id);
return new ResponseEntity<>("El contacto ha sido eliminado", HttpStatus.OK);
}catch (Exception e){
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);

@ -112,10 +112,17 @@ public class EmpressaController {
empresa.setKeywords(keywords);
Sector existingSector = sectorService.findById(sectorId);
if(existingSector != null) {
System.out.println("TEST UPDATE: EX-SEC " + existingSector.getNombre());
System.out.println("TEST UPDATE: EX-SEC " + existingSector.getId());
empresa.setSector(existingSector);
System.out.println("TEST UPDATE: EMPRESA-NOMBRE " + empresa.getNombre());
System.out.println("TEST UPDATE: EMPRESA-ID " + empresa.getId());
System.out.println("TEST UPDATE: EMPRESA-SEC " + empresa.getSector().getNombre());
System.out.println("TEST UPDATE: EMPRESA-SEC-ID " + empresa.getSector().getId());
} else {
return new ResponseEntity<>("Sector no encontrado", HttpStatus.BAD_REQUEST);
}
empresaService.save(empresa);
return new ResponseEntity<>("Los datos de la empresa fue renovados con exito", HttpStatus.OK);
}catch (Exception e) {

@ -7,9 +7,11 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
@ -60,6 +62,11 @@ public interface EmpressaRepository extends JpaRepository<Empresa, Long>, JpaSpe
@Query("SELECT e FROM Empresa e WHERE e.keywords LIKE %:query%")
ArrayList<Empresa> findEmpresasByKeywordsCust(String query);
@Modifying
@Transactional
@Query("UPDATE Empresa e SET e.nombre = :nombre, e.cif = :cif, e.correo = :correo, e.telefono = :telefono, e.keywords = :keywords, e.sector.id = :sectorId WHERE e.id = :id")
void saveManualy(@Param("id") Long id, @Param("nombre") String nombre, @Param("cif") String cif, @Param("correo") String correo, @Param("telefono") String telefono, @Param("keywords") String keywords, @Param("sectorId") Long sectorId);
// @Query()
// List<Empresa> findByQueryAndSecondaryOption(String query, String secondaryQuery);

@ -56,7 +56,7 @@ public interface OfertaRepository extends JpaRepository<Oferta, Long> {
Page<Oferta> findOfertaByEmpresa(@Param("query") String query, Pageable pageable);
@Query(value = "SELECT * FROM ofertas o WHERE YEAR(o.fecha) = :yearQuery", nativeQuery = true)
Page<Oferta> findOfertaByFechaAnyo(@Param("yearQuery") Integer yearQuery, Pageable pageable);
Page<Oferta> findOfertaByFechaAnyo(@Param("yearQuery") String yearQuery, Pageable pageable);
@Query("SELECT o FROM Oferta o WHERE lower(o.nombre) IN :queryList")
Page<Oferta> findOfertasByNombres(@Param("queryList") String queryList, Pageable pageable);
@ -76,9 +76,12 @@ public interface OfertaRepository extends JpaRepository<Oferta, Long> {
@Query("SELECT o FROM Oferta o JOIN o.skills s WHERE s.nombre LIKE %:query%")
Collection<Oferta> ofertasBySkillCust(@Param("query") String query);
@Query(value = "SELECT * FROM ofertas o WHERE YEAR(o.fecha) = YEAR(:dateQuery)", nativeQuery = true)
Collection<? extends Oferta> ofertasByFechaAnyoCust(Date dateQuery);
@Query(value = "SELECT DISTINCT YEAR(o.fecha) FROM ofertas o", nativeQuery = true)
List<Integer> findDistinctYears();
@Query(value = "SELECT * FROM ofertas o WHERE o.fecha >= CURRENT_DATE - INTERVAL 3 MONTH", nativeQuery = true)
Page<Oferta> findOfertaByFechaUltimos3Meses(Pageable pageable);
@Query(value = "SELECT * FROM ofertas o WHERE o.fecha >= CURRENT_DATE - INTERVAL 6 MONTH", nativeQuery = true)
Page<Oferta> findOfertaByFechaUltimos6Meses(Pageable pageable);
}

@ -56,7 +56,6 @@ public class EmpresaService implements IEmpresa {
public Empresa save(Empresa empresa) {
return empresaRepository.save(empresa);
}
@Transactional
@Override
public void deleteById(Long id) {
@ -156,5 +155,11 @@ public class EmpresaService implements IEmpresa {
listEmpPrime.retainAll(listEmpSec);
return listEmpPrime;
}
@Override
public void saveManualy(long id, String nombre, String cif, String correo, String telefono, String keywords, long id1) {
empresaRepository.saveManualy( id, nombre, cif, correo, telefono, keywords, id1);
}
}

@ -108,19 +108,20 @@ public class OfertaService implements IOferta {
}
@Override
public Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) throws ParseException {
Integer yearQuery = null;
if(isYear(query)){
yearQuery = Integer.parseInt(query);
System.out.println("Year query TEST: " + yearQuery);
}
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Skill")) {
return ofertaRepository.findOfertaBySkill(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) {
return ofertaRepository.findOfertaByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Año")) {
return ofertaRepository.findOfertaByFechaAnyo(yearQuery, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Este Año")) {
String year = new SimpleDateFormat("yyyy").format(new Date());
return ofertaRepository.findOfertaByFechaAnyo(year, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Ultimos 3 meses")){
return ofertaRepository.findOfertaByFechaUltimos3Meses(PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Ultimos 6 meses")){
return ofertaRepository.findOfertaByFechaUltimos6Meses(PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Empresa")) {
return ofertaRepository.findOfertaByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
@ -174,13 +175,13 @@ public class OfertaService implements IOferta {
listEmpPrime.addAll(ofertaRepository.ofertasByEmpresaCust(query));
} else if (secondaryOption.equals("Skill")) {
listEmpPrime.addAll(ofertaRepository.ofertasBySkillCust(query));
}else if(secondaryOption.equals("Año")){
try {
Date dateQuery = new SimpleDateFormat("yyyy-MM-dd").parse(query);
listEmpPrime.addAll(ofertaRepository.ofertasByFechaAnyoCust(dateQuery));
} catch (ParseException e) {
e.printStackTrace();
}
} else if (secondaryOption.equals("Este Año")) {
String year = new SimpleDateFormat("yyyy").format(new Date());
listEmpPrime.addAll(ofertaRepository.findOfertaByFechaAnyo(year, PageRequest.of(0, 1000, Sort.by("fecha").ascending())).getContent());
} else if (secondaryOption.equals("Ultimos 3 meses")) {
listEmpPrime.addAll(ofertaRepository.findOfertaByFechaUltimos3Meses(PageRequest.of(0, 1000, Sort.by("fecha").ascending())).getContent());
} else if (secondaryOption.equals("Ultimos 6 meses")) {
listEmpPrime.addAll(ofertaRepository.findOfertaByFechaUltimos6Meses(PageRequest.of(0, 1000, Sort.by("fecha").ascending())).getContent());
}
}
}

@ -28,5 +28,7 @@ public interface IEmpresa extends IPagination<Empresa> {
List<Empresa> searchCustom(String querySearchBar, String query,String secondaryOption);
void saveManualy(long id, String nombre, String cif, String correo, String telefono, String keywords, long id1);
// List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery);
}

@ -41,28 +41,27 @@ h1 {
.table {
width: 100%;
}
.table td, .table th {
overflow: visible;
white-space: nowrap;
.table th, .table td.keywords-cell {
width: 200px; /* Adjust this value to your needs */
}
.table thead th {
position: sticky;
top: 0;
background: #fff;
z-index: 10;
width: 200px; /* Set a specific width */
overflow: auto; /* Add overflow */
}
.table td {
width: 100px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
.table td.keywords-cell {
display: inline-block !important;
overflow-x: auto !important;
text-overflow: clip !important;
border: 1px solid #ddd;
}
.table tr td:first-child {
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
.table-header, .keywords-cell {
width: 200px; /* Adjust this value as needed */
}
.table tr th:first-child {
.table tr td:first-child {
width: 50px;
overflow: hidden;
text-overflow: ellipsis;

@ -170,7 +170,7 @@
</div>
<div class="skills-container">
<h2>Select Skills</h2>
<h2>Elige Skills</h2>
<select id="skills" multiple>
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}"></option>
</select>

@ -169,7 +169,7 @@
</div>
<div class="skills-container">
<h2>Select Skills</h2>
<h2>Elige Skills</h2>
<select id="skills" multiple>
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}" th:selected="${alumno.skills.contains(skill)}"></option>
</select>

@ -74,9 +74,9 @@
</div>
<div class ="form-group row">
<label class="col-sm-3 col-form-label" for="cif">Apellido</label>
<label class="col-sm-3 col-form-label" for="apellido">Apellido</label>
<div class = "col-sm-9">
<input type="text" th:field="*{apellido}" required minlength="2" maxlength="100" title="Entra un nombre" class="form-control" id="cif">
<input type="text" th:field="*{apellido}" required minlength="2" maxlength="100" title="Entra un nombre" class="form-control" id="apellido">
</div>
</div>

@ -74,9 +74,9 @@
</div>
<div class ="form-group row">
<label class="col-sm-3 col-form-label" for="cif">Apellido</label>
<label class="col-sm-3 col-form-label" for="apellido">Apellido</label>
<div class = "col-sm-9">
<input type="text" th:field="*{apellido}" required minlength="2" maxlength=100" title="Entra un nombre" class="form-control" id="cif">
<input type="text" th:field="*{apellido}" required minlength="2" maxlength="100" title="Entra un nombre" class="form-control" id="apellido">
</div>
</div>
@ -109,6 +109,7 @@
</div>
</div>
<div class="text-center">
<input type="submit" value="Guardar" class="btn"/>
<input type="button" value="Cancelar" id="btnCancelar" class="btn" onclick="goBack()"/>
@ -127,7 +128,7 @@
var formData = $(this).serialize();
var empresaId = $('#empresa').val();
formData += '&contacto=' + encodeURIComponent(empresaId);
formData += '&empresa.id=' + encodeURIComponent(empresaId);
$.ajax({
url: '/contacto/update',
type: 'post',

@ -136,7 +136,6 @@
});
function goBack() {
console.log("goBack function called");
window.history.back();
}

@ -127,6 +127,9 @@
</form>
<script>
function goBack() {
window.history.back();
}
var tagify; // Declare tagify outside of the $(document).ready() function
$(document).ready(function() {

@ -108,7 +108,7 @@
</div>
<div class="skills-container">
<h2>Select Skills</h2>
<h2>Elige Skills</h2>
<select id="skills" multiple>
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}"></option>
</select>

@ -109,7 +109,7 @@
</div>
<div class="skills-container">
<h2>Select Skills</h2>
<h2>Elige Skills</h2>
<select id="skills" multiple>
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}" th:selected="${oferta.skills.contains(skill)}"></option>
</select>

@ -117,11 +117,6 @@
<select id="secondaryDropdown"></select>
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption">
</div>
<div id="yearDropdownContainer" style="display: none;">
<select id="yearDropdown"></select>
</div>
</form>
</div>
@ -251,6 +246,9 @@
if (secondaryDropdown.value === 'Todo') {
searchBar.value = 'Todo';
searchBar.disabled = true;
} else if (secondaryDropdown.value === 'Este Año' || secondaryDropdown.value === 'Ultimos 3 meses' || secondaryDropdown.value === 'Ultimos 6 meses') {
searchBar.value = secondaryDropdown.value;
searchBar.disabled = true;
} else {
searchBar.value = '';
searchBar.disabled = false;
@ -273,7 +271,7 @@
options = ['Todo', 'Nombre', 'Empresa'];
break;
case'ofertas':
options = ['Todo', 'Nombre', 'Empresa','Año'];
options = ['Todo', 'Nombre', 'Empresa','Este Año',"Ultimos 3 meses","Ultimos 6 meses"];
break;
case'sucursales':
options = ['Todo', 'Nombre', 'Empresa','Localidad'];
@ -324,54 +322,6 @@
return true;
}
////////////////////////////////////////DATE//////////////////////////////////////
// Fetch the distinct years from the server
// Fetch the distinct years from the server
fetch('/api/distinct-years')
.then(response => response.json()) // Convert the response to JSON
.then(years => {
// Get a reference to the yearDropdown select element
var yearDropdown = document.getElementById('yearDropdown');
// Remove any existing options in the dropdown
yearDropdown.innerHTML = '';
// Iterate over each year
years.forEach(year => {
// Create a new option element
var option = document.createElement('option');
option.value = year;
option.text = year;
// Append the option to the yearDropdown select element
yearDropdown.appendChild(option);
});
})
.catch(error => console.error('Error:', error));
// Get a reference to the yearDropdownContainer div
// Add an event listener to the secondaryDropdown select element
secondaryDropdown.addEventListener('change', function() {
// Check if the selected value is "Año"
if (secondaryDropdown.value === 'Año') {
// If it is, make the yearDropdownContainer visible
yearDropdownContainer.style.display = 'block';
searchBar.disabled = true;
} else {
// If it's not, hide the yearDropdownContainer
yearDropdownContainer.style.display = 'none';
searchBar.disabled = false;
}
});
var yearDropdown = document.getElementById('yearDropdown');
var searchOption = document.getElementById('searchOption');
yearDropdown.addEventListener('change', function() {
searchBar.value = yearDropdown.value;
});
</script>
</body>
</html>

@ -222,6 +222,9 @@
if (secondaryDropdown.value === 'Todo') {
searchBar.value = 'Todo';
searchBar.disabled = true;
} else if (secondaryDropdown.value === 'Este Año' || secondaryDropdown.value === 'Ultimos 3 meses' || secondaryDropdown.value === 'Ultimos 6 meses') {
searchBar.value = secondaryDropdown.value;
searchBar.disabled = true;
} else {
searchBar.value = '';
searchBar.disabled = false;
@ -244,7 +247,7 @@
options = ['Todo', 'Nombre', 'Empresa'];
break;
case'ofertas':
options = ['Todo', 'Nombre', 'Empresa','Año'];
options = ['Todo', 'Nombre', 'Empresa','Este Año',"Ultimos 3 meses","Ultimos 6 meses"];
break;
case'sucursales':
options = ['Todo', 'Nombre', 'Empresa','Localidad'];

@ -107,9 +107,9 @@
<td>[[${alumno.correo}]]</td>
<td>[[${alumno.correo2}]]</td>
<td>[[${alumno.nacionalidad}]]</td>
<td>[[${alumno.keywords}]]</td>
<td class="keywords-cell">[[${alumno.keywords}]]</td>
<td>[[${alumno.ciclo.nombre}]]</td>
<td>
<td class="keywords-cell">
<span th:each="skill : ${alumno.skills}" th:text="${skill.nombre} + ' '"></span>
</td>
@ -146,8 +146,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>
@ -284,9 +284,9 @@
<td>${alumno.correo}</td>
<td>${alumno.correo2}</td>
<td>${alumno.nacionalidad}</td>
<td>${alumno.keywords}</td>
<td class="keywords-cell">${alumno.keywords}</td>
<td>${alumno.ciclo.nombre}</td>
<td>
<td class="keywords-cell">
${alumno.skills.map(skill => skill.nombre).join(', ')}
</td>
`;
@ -296,12 +296,10 @@
document.querySelectorAll('.edit-icon').forEach(function(icon) {
icon.removeEventListener('click', handleEdit);
icon.addEventListener('click', handleEdit);
//console.log("Edit icon event listener attached");
});
document.querySelectorAll('.delete-icon').forEach(function(icon) {
icon.removeEventListener('click', handleDelete);
icon.addEventListener('click', handleDelete);
//console.log("Delete icon event listener attached");
});
table.style.pointerEvents = 'auto';
@ -349,6 +347,19 @@
}
});
});
/////////////////MOUSE SROLL FOR KEYWORD AND SKILLS//////////////////////
// Select all elements with the 'keywords-cell' class
const cells = document.querySelectorAll('.keywords-cell');
// Add a 'wheel' event listener to each cell
cells.forEach(cell => {
cell.addEventListener('wheel', function(e) {
// Prevent the default behavior (vertical scroll)
e.preventDefault();
// Scroll horizontally instead
this.scrollLeft += e.deltaY;
}, { passive: false }); // Use passive: false to make preventDefault() work
});
</script>
</body>
</html>

@ -83,8 +83,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -103,8 +103,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -68,7 +68,7 @@
<td>[[${empresa.cif}]]</td>
<td>[[${empresa.correo}]]</td>
<td>[[${empresa.telefono}]]</td>
<td>[[${empresa.keywords}]]</td>
<td class="keywords-cell">[[${empresa.keywords}]]</td>
<td>[[${empresa.sector.nombre}]]</td>
</tr>
</tbody>
@ -103,8 +103,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>
@ -145,7 +145,7 @@
});
function handleEdit(event) {
console.log("handleEdit function called");
// console.log("handleEdit function called");
const row = event.target.closest('tr');
const rowId = row.dataset.id;
// console.log("Row ID: " + rowId);
@ -242,7 +242,7 @@
<td>${empresa.cif}</td>
<td>${empresa.correo}</td>
<td>${empresa.telefono}</td>
<td>${empresa.keywords}</td>
<td class="keywords-cell">${empresa.keywords}</td>
<td>${empresa.sector.nombre}</td>
`;
tableBody.appendChild(row);
@ -299,6 +299,15 @@
}
});
});
/////////////////MOUSE SROLL FOR KEYWORD AND SKILLS//////////////////////
const cells = document.querySelectorAll('.keywords-cell');
cells.forEach(cell => {
cell.addEventListener('wheel', function(e) {
e.preventDefault();
this.scrollLeft += e.deltaY;
}, { passive: false });
});
</script>
</body>
</html>

@ -72,8 +72,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -66,7 +66,7 @@
<td>[[${oferta.descripcion}]]</td>
<td>[[${oferta.sucursal.nombre}]]</td>
<td>[[${oferta.ciclo.nombre}]]</td>
<td>
<td class="keywords-cell">
<span th:each="skill : ${oferta.skills}" th:text="${skill.nombre} + ' '"></span>
</td>
</tr>
@ -102,8 +102,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>
@ -242,7 +242,7 @@
<td>${oferta.descripcion}</td>
<td>${oferta.sucursal.nombre}</td>
<td>${oferta.ciclo.nombre}</td>
<td>
<td class="keywords-cell">
${oferta.skills.map(skill => skill.nombre).join(', ')}
</td>
`;
@ -305,6 +305,14 @@
}
});
});
/////////////////MOUSE SROLL FOR KEYWORD AND SKILLS//////////////////////
const cells = document.querySelectorAll('.keywords-cell');
cells.forEach(cell => {
cell.addEventListener('wheel', function(e) {
e.preventDefault();
this.scrollLeft += e.deltaY;
}, { passive: false });
});
</script>
</body>
</html>

@ -71,8 +71,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -71,8 +71,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -96,8 +96,8 @@
<div id="modalDelete" class ="modal">
<div class="modal-content">
<p>¿Estas seguro que quires borar este elemnto?</p>
<span class="delete">Borar</span>
<p>¿Estas seguro que quires borrar este elemnto?</p>
<span class="delete">Borrar</span>
<span class="close">Cancelar</span>
</div>

@ -150,7 +150,7 @@
</div>
<div class="skills-container">
<h2>Select Skills</h2>
<h2>Elige Skills</h2>
<select id="skills" multiple>
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}" th:selected="${alumno.skills.contains(skill)}"></option>
</select>

Loading…
Cancel
Save

Powered by INFORMATICA.FP.EDU.ES.