This commit is contained in:
2025-09-23 10:11:35 -06:00
parent 4bc2a47a96
commit b234ae0d22
52 changed files with 733 additions and 64 deletions
+1 -1
View File
@@ -176,7 +176,7 @@
<script>
$(function () {
'use strict';
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
});
// Solución definitiva al error de declaración duplicada
+2 -2
View File
@@ -114,7 +114,7 @@
<script>
$(function () {
"use strict";
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
let questions;
let currentQuestionIndex = 0;
@@ -295,4 +295,4 @@
$(window).on('resize', igualarAlturaBgCustomTransparent);
igualarAlturaBgCustomTransparent();
});
</script>
</script>
+6 -7
View File
@@ -26,8 +26,7 @@
.drop-card {
border: none;
width: 200px;
min-width: 80px;
width: 100%;
height: 40px;
}
@@ -105,7 +104,7 @@
<div class="bg-secondary text-white fw-bold py-2 px-2">
1
</div>
<div class="option"></div>
<div class="option w-100"></div>
</div>
</div>
</div>
@@ -118,7 +117,7 @@
<div class="bg-secondary text-white fw-bold py-2 px-2">
2
</div>
<div class="option"></div>
<div class="option w-100"></div>
</div>
</div>
</div>
@@ -131,7 +130,7 @@
<div class="bg-secondary text-white fw-bold py-2 px-2">
3
</div>
<div class="option"></div>
<div class="option w-100"></div>
</div>
</div>
</div>
@@ -144,7 +143,7 @@
<div class="bg-secondary text-white fw-bold py-2 px-2">
4
</div>
<div class="option"></div>
<div class="option w-100"></div>
</div>
</div>
</div>
@@ -181,7 +180,7 @@
<script>
$(function () {
"use strict";
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
let questions;
let currentQuestionIndex = 0;
+1 -1
View File
@@ -119,7 +119,7 @@
<script>
$(function () {
'use strict';
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
let questions;
let currentQuestionIndex = 0;
let currentQuestion;
+1 -1
View File
@@ -65,7 +65,7 @@
<script>
$(function () {
"use strict";
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
// Función para mezclar array (algoritmo Fisher-Yates)
function shuffleArray(array) {
+1 -1
View File
@@ -212,7 +212,7 @@
<script>
$(function () {
"use strict";
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
let questions;
let currentQuestionIndex = 0;
+280 -6
View File
@@ -8,19 +8,44 @@
.hr-style {
opacity: 1;
width: 70%;
width: 85%;
}
.custom-grid {
position: relative;
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: auto;
gap: 10px;
justify-content: center;
align-items: center;
max-width: 1280px; /* Esto limita el ancho total */
margin: 0 auto;
width: 100%;
}
.card-container {
width: 100%;
aspect-ratio: 1;
cursor: pointer;
}
.card-container.disabled {
filter: grayscale(1);
pointer-events: none;
}
</style>
<div class='page-sco py-2 py-md-4'>
<div class='container'>
<div class='row justify-content-center align-items-center'>
<div class='page-sco py-2 py-md-4 h-100'>
<div class='container h-100'>
<div class='row justify-content-center align-items-center h-100'>
<div class='col-12'>
<div class='row justify-content-center'>
<div class="col-10 mb-2">
<h2 class="text-center fw-bold text-primary">¿Qué necesito para poder realizar la Diálisis Peritoneal Continua Ambulatoria (DPCA)?</h2>
<hr class="border border-3 border-verde-oscuro hr-style mx-auto my-0">
</div>
<div class="col-10 px-0 mb-3">
<div class="col-10 px-0 mb-1">
<div class="card bg-verde-gris border-0 my-2 rounded-4 bg-custom p-3 text-center">
<div class="d-flex justify-content-center align-items-center flex-row">
<img src="img/08.0.png" class="img-fluid mx-3">
@@ -28,6 +53,127 @@
</div>
</div>
</div>
<div class="col-12">
<di class="tablero d-flex flex-column justify-content-center align-items-center gap-2">
<div class="row-questions custom-grid" id="row-questions">
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.1.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.2.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.3.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.4.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.5.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.6.png" class="img-fluid">
</div>
</div>
</div>
<div class="row-answer custom-grid" id="row-answer">
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.1c.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.2c.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.3c.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.4c.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.5c.png" class="img-fluid">
</div>
</div>
<div class="card-container">
<div class="front">
<img src="img/08.front.png" class="img-fluid">
</div>
<div class="back">
<img src="img/08.6c.png" class="img-fluid">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="d-none">
<div id="retro-pop">
<div class="container-fluid">
<div class=" w-100 text-center">
<img src="img/3.5.png" class="img-fluid">
</div>
<div class="row justify-content-center">
<div class="col-12 text-center mb-2">
<h3 class="text-secondary-dark fw-bold">¡Bien hecho!</h3>
</div>
<div class="col-12 text-center">
<p class="mb-0">Has concluido la actividad.</p>
</div>
</div>
</div>
@@ -36,6 +182,134 @@
<script>
$(function () {
"use strict";
$('body').addClass('fake');
$('.wrap-course-content').addClass('fake');
const flip_sound = CourseNav.createSound('audio/flip.mp3');
const feedbackcorrect = CourseNav.createSound('audio/feedback-correct.mpeg');
const feedbackincorrect = CourseNav.createSound('audio/feedback-incorrect.mpeg');
// Función para asignar pares a cada tarjeta
function assignPairs(fatherId) {
const optionsContainer = document.getElementById(fatherId);
const optionsArray = Array.from(optionsContainer.children);
optionsArray.forEach((option, index) => {
option.setAttribute('data-par', index);
});
}
// Función para mezclar las tarjetas dentro del contenedor especificado
function randomizeOptions(fatherId) {
const optionsContainer = document.getElementById(fatherId);
const optionsArray = Array.from(optionsContainer.children);
const shuffledOptions = optionsArray.sort(() => Math.random() - 0.5);
shuffledOptions.forEach(option => optionsContainer.appendChild(option));
}
// Inicializar el plugin flip y configurar la lógica del memorama con la restricción de fila
function initializeFlip() {
let flippedCards = [];
let lastFlippedRow = ""; // Para rastrear la última fila girada
$(".card-container").flip({
trigger: 'manual' // Control manual del volteo
});
$(".card-container").on("click", function () {
const $card = $(this);
const currentRow = $card.closest(".row-answer").length > 0 ? "row-answer" : "row-questions";
// Limitar el giro a una carta por fila y evitar tres giros
if (flippedCards.length < 2 && (flippedCards.length === 0 || currentRow !== lastFlippedRow)) {
$card.flip(true);
flippedCards.push($card);
lastFlippedRow = currentRow;
flip_sound.play();
// Si hay dos cartas volteadas, verificar coincidencia
if (flippedCards.length === 2) {
const [firstCard, secondCard] = flippedCards;
if (firstCard.data("par") === secondCard.data("par")) {
// Las tarjetas coinciden, dejarlas volteadas y marcar como emparejadas
firstCard.addClass("disabled");
secondCard.addClass("disabled");
// Agregar el efecto de resplandor
gsap.to(firstCard, {
duration: 1,
boxShadow: "0px 0px 20px 10px #fff",
onComplete: function () {
// Quitar el efecto de resplandor después de 2 segundos
gsap.to(firstCard, {
duration: 1,
delay: 1,
boxShadow: "0px 0px 0px 0px #fff"
});
}
});
// Agregar el efecto de resplandor
gsap.to(secondCard, {
duration: 1,
boxShadow: "0px 0px 20px 10px #fff",
onComplete: function () {
// Quitar el efecto de resplandor después de 2 segundos
gsap.to(secondCard, {
duration: 1,
delay: 1,
boxShadow: "0px 0px 0px 0px #fff"
});
}
});
CourseNav.audioController.stopAllSoundsAndPlay(feedbackcorrect);
flippedCards = [];
checkGameCompletion();
} else {
CourseNav.audioController.stopAllSoundsAndPlay(feedbackincorrect);
// Las tarjetas no coinciden, voltearlas de nuevo después de un breve retraso
setTimeout(() => {
firstCard.flip(false);
secondCard.flip(false);
flippedCards = [];
lastFlippedRow = ""; // Reiniciar el rastreo de fila
}, 850);
}
}
}
});
}
// Verificar si todas las tarjetas han sido emparejadas
function checkGameCompletion() {
const totalPairs = $(".card-container").length / 2;
const matchedPairs = $(".card-container.disabled").length / 2;
if (matchedPairs === totalPairs) {
setTimeout(showFeedbackPopup, 250);
}
}
function showFeedbackPopup() {
const html = $("#retro-pop").html();
Swal.fire({
html: html,
target: "body",
customClass: {
popup: 'pop_html_style border border-3 border-primary rounded-4',
confirmButton: 'btn text-white bg-primary amor fw-semibold animate__animated animate__pulse animate__infinite'
},
confirmButtonText: "Cerrar",
showConfirmButton: true,
allowOutsideClick: false,
allowEscapeKey: false,
backdrop: "rgba(65, 60, 60, .95)",
width: "35em",
didClose: () => {
CourseNav.setSlideVisited();
}
});
}
assignPairs('row-answer');
assignPairs('row-questions');
randomizeOptions('row-answer');
randomizeOptions('row-questions');
initializeFlip();
});
</script>
+250
View File
@@ -0,0 +1,250 @@
<style>
.fake {
background-image: url(img/bg06.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
.hr-style {
opacity: 1;
width: 80%;
}
.bg-custom {
background: #f0f4f2;
}
.tablero {
position: relative;
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 10px;
justify-content: center;
align-items: center;
max-width: 1280px; /* Esto limita el ancho total */
margin: 0 auto;
width: 100%;
}
.card-container2 {
width: 100%;
aspect-ratio: 1;
cursor: pointer;
}
</style>
<div class='page-sco py-2 py-md-0 h-100'>
<div class='container h-100'>
<div class='row justify-content-center align-items-center h-100'>
<div class='col-12'>
<div class='row justify-content-center'>
<div class="col-10 mb-2">
<h2 class="text-center fw-bold text-primary">¿Qué necesito para poder realizar la Diálisis Peritoneal Automatizada (DPA)?</h2>
<hr class="border border-3 border-verde-oscuro hr-style mx-auto my-0">
</div>
<div class="col-9 mb-1">
<div class="card border-0 my-2 rounded-15 bg-custom shadow p-3 py-2 text-center">
<div class="d-flex justify-content-center align-items-center flex-row">
<img src="img/3.1.png" class="img-fluid mx-3">
<p class="mb-0"><strong>Instrucciones:</strong> Da clic en los elementos para descubrir cuáles son necesarios para realizar la DPA.</p>
</div>
</div>
</div>
<div class="col-12">
<div class="tablero">
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.0.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="1">
<div class="front">
<img src="img/09.1.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.13.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.2.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.3.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="1">
<div class="front">
<img src="img/09.4.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.13.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.5.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.6.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.7.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="0">
<div class="front">
<img src="img/09.8.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.12.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="1">
<div class="front">
<img src="img/09.9.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.13.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="1">
<div class="front">
<img src="img/09.10.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.13.png" class="img-fluid">
</div>
</div>
<div class="card-container2" data-correct="1">
<div class="front">
<img src="img/09.11.png" class="img-fluid">
</div>
<div class="back">
<img src="img/09.13.png" class="img-fluid">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="d-none">
<div id="pop0">
<div class="container-fluid">
<div class=" w-100 text-center">
<img src="img/09.14.png" class="img-fluid">
</div>
<div class="row justify-content-center">
<div class="col-12 text-center mb-2">
<h3 class="text-secondary-dark fw-bold">¡Recuerda!</h3>
</div>
<div class="col-12 text-center">
<p class="mb-0">Siempre debes lavar tus manos antes de empezar cualquier terapia.</p>
</div>
</div>
</div>
</div>
</div>
<script>
$(function () {
"use strict";
$('.wrap-course-content').addClass('fake');
const flip_sound = CourseNav.createSound('audio/flip.mp3');
const feedbackcorrect = CourseNav.createSound('audio/feedback-correct.mpeg');
const feedbackincorrect = CourseNav.createSound('audio/feedback-incorrect.mpeg');
$(".card-container2").flip({
trigger: 'manual' // Control manual del volteo
});
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// Shuffle cards
const tablero = document.querySelector('.tablero');
const cards = Array.from(tablero.querySelectorAll('.card-container2'));
const shuffledCards = shuffleArray(cards);
shuffledCards.forEach(card => tablero.appendChild(card));
$(".card-container2").click(function (e) {
e.preventDefault();
const $card = $(this);
if ($card.hasClass('disabled')) return;
flip_sound.play();
$card.flip(true);
if($card.data('correct') == '0') {
CourseNav.audioController.stopAllSoundsAndPlay(feedbackcorrect);
$card.addClass('disabled');
}else{
CourseNav.audioController.stopAllSoundsAndPlay(feedbackincorrect);
setTimeout(() => {
$card.flip(false);
}, 700);
}
// Check if all correct cards are completed
const correctCards = $('.card-container2[data-correct="0"]');
const completedCorrectCards = $('.card-container2[data-correct="0"].disabled');
if (correctCards.length === completedCorrectCards.length) {
checkAllCompleted();
}
});
function checkAllCompleted() {
setTimeout(() => {
const html = $("#pop0").html();
Swal.fire({
html: html,
target: "body",
customClass: {
popup: 'pop_html_style border border-3 border-primary rounded-4',
confirmButton: 'btn text-white bg-primary amor fw-semibold animate__animated animate__pulse animate__infinite'
},
confirmButtonText: "Cerrar",
showConfirmButton: true,
allowOutsideClick: false,
allowEscapeKey: false,
backdrop: "rgba(65, 60, 60, .95)",
width: "35em",
didClose: () => {
CourseNav.setSlideVisited();
$(".card-container2").addClass('disabled');
}
});
}, 250);
}
});
</script>
+45
View File
@@ -0,0 +1,45 @@
<style>
.fake {
background-image: url(img/bg07.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
.card-style {
border-radius: 20px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.hr-style {
opacity: 1;
width: 60%;
}
</style>
<div class='page-sco py-2 py-md-0 h-100'>
<div class='container h-100'>
<div class='row justify-content-center align-items-center h-100'>
<div class='col-12 ps-0'>
<div class='row justify-content-center align-items-center'>
<div class="col-5 animate__animated animate__lightSpeedInLeft">
<div class="card card-style bg-verde-oscuro ps-5 pr-3 py-3 border-0 text-center">
<h2 class="text-white fw-bold">¿Qué es un catéter?</h2>
<hr class="hr-style border border-3 border-verde-ceniza hr-style mx-auto my-0">
</div>
</div>
<div class="col-7 text-center animate__animated animate__zoomIn">
<img src="img/10.0.png" class="img-fluid">
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(function () {
"use strict";
$('.wrap-course-content').addClass('fake');
CourseNav.setSlideVisited();
});
</script>
+58
View File
@@ -0,0 +1,58 @@
<style>
.fake {
background-image: url(img/bg11.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
.hr-style {
opacity: 1;
width: 40%;
}
.bg-custom {
box-shadow: 0 0 10px rgba(0, 0, 0, .5);
}
</style>
<div class='page-sco py-2 py-md-0 h-100'>
<div class='container h-100'>
<div class='row justify-content-center align-items-center h-100'>
<div class='col-12'>
<div class='row justify-content-center'>
<div class="col-10 mb-2 animate__animated animate__bounceInDown">
<h2 class="text-center fw-bold text-primary">Características del sitio de salida</h2>
<hr class="border border-3 border-verde-oscuro hr-style mx-auto my-0">
</div>
<div class="col-12 px-0 mb-1 animate__animated animate__lightSpeedInLeft">
<div class="card bg-white border-0 my-2 rounded-0 bg-custom p-3 text-center">
<div class="d-flex justify-content-center align-items-center flex-row gap-2">
<img src="img/3.1.png" class="img-fluid mx-3">
<div class="parrafos text-start">
<p class="mb-2"><strong>Instrucciones:</strong> Observa las imágenes del sitio de salida que se presentan en las
tarjetas.</p>
<p class="mb-0">Si consideras que se encuentra sano, desliza la tarjeta a la <strong class="text-verde-pino">derecha</strong>. Si
crees que no está sano,
desliza la tarjeta a la <strong class="text-verde-pino">izquierda</strong>.</p>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="row justify-content-center">
<div class="col-12 mb-2">
<div class="d-flex justify-content-center align-items-center gap-2 flex-row"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(function () {
"use strict";
$('.wrap-course-content').addClass('fake');
});
</script>