Fix: videos ahora con reproductor Vimeo embebido + Nginx en /rm-KSALDIS-DT/
This commit is contained in:
@@ -573,8 +573,16 @@ body {
|
||||
<span>🎬 <strong>PLANIFICACIÓN</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1170245111"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M1_Planificacion_PLANIFICACIÓN.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<h4>Resumen de la Clase: Planificación y Periodización Ágil (Voleibol)</h4><p>Esta clase correspondiente al <b>Curso de Entrenador Nacional II de Vóleibol (Edición 2026)</b> aborda la planificación de la preparación física bajo un enfoque moderno de <b>periodización ágil</b>. El objetivo central es que el deportista llegue en su mejor versión a la competencia, priorizando la salud y la individualidad sobre planes rígidos.</p><hr><h4>1. Concepto de Carga e Individualidad</h4><ul><br>
|
||||
<li><b>Carga Integral:</b> No se limita solo al entrenamiento de cancha; incluye el estrés físico, psicológico y el impacto diario en cada jugador.</li><br>
|
||||
<li><b>Principio de Individualidad:</b> Es el factor determinante. Un plan exitoso debe ser flexible y ajustarse según el feedback (carga interna) de cada deportista.</li><br>
|
||||
@@ -704,8 +712,16 @@ body {
|
||||
<span>🎬 <strong>PREPARACIÓN ATLÉTICA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1173231315"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M1_Preparacion_Atletica_PREPARACIÓN_ATLÉTICA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<h4>Resumen de Clase: Preparación Atlética en el Voleibol</h4><p><strong>Profesor:</strong> Alejandro Bertorello</p><p>En este segundo encuentro del curso para Entrenadores Nacionales Nivel 2, se abordó la implementación práctica de la preparación física, enfocándose en la sesión de entrenamiento como la unidad estructural básica y el rol del entrenador/preparador en el campo.</p><hr><h4>1. Filosofía y Rol del Preparador Físico</h4><ul><br>
|
||||
<li><strong>Observación Pedagógica:</strong> El preparador debe estar presente y activo, corrigiendo técnicas y dando feedback constante. No se puede dirigir una sesión de pesas de forma pasiva.</li><br>
|
||||
<li><strong>Individualidad:</strong> Es fundamental diferenciar los planes según el tiempo de juego, historial de lesiones y fatiga acumulada del deportista.</li><br>
|
||||
@@ -805,8 +821,16 @@ body {
|
||||
<span>🎬 <strong>Modelo de ejercicios preventivos de lesiones en el vóleibol</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1063655414"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M1_Preparacion_Atletica_video_1063655414.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Sesión preventiva general </p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-sesion-preventiva-post-viaje-7">8. Sesión Preventiva (Post viaje)</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -814,8 +838,16 @@ body {
|
||||
<span>🎬 <strong>Sesión Preventiva (Post viaje)</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1063657248"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M1_Preparacion_Atletica_video_1063657248.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Sesión preventiva</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelo-de-sesion-de-carga-choque-8">9. Modelo de Sesión de carga - choque</h3>
|
||||
<p>Modelo de sesión para deportistas expertos y avanzados</p><div class="pdf-viewer-wrap collapsed">
|
||||
@@ -893,8 +925,16 @@ body {
|
||||
<span>🎬 <strong>EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1173576229"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M1_Explicacion_TP_video_1173576229.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<div><br>
|
||||
<h4>Consignas: Trabajo Práctico Integrador (TPI)</h4><br>
|
||||
<p><strong>Profesor:</strong> Alejandro Bertorello</p><br>
|
||||
@@ -948,8 +988,16 @@ body {
|
||||
<span>🎬 <strong>SEGUIMIENTO DE EQUIPOS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1175436659"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/MX_video_1175436659.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Clase en vivo<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modulo-1-1">2. . MODULO 1</h3>
|
||||
@@ -1095,8 +1143,16 @@ body {
|
||||
<span>🎬 <strong>ANÁLISIS DE EQUIPO 1</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1073484590"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/MX_video_1073484590.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-analisis-y-seguimiento-2-1">2. ANALISIS Y SEGUIMIENTO 2</h3>
|
||||
<p>Análisis del Scout <br> Gestión del Entrenador<br> Dirección Estratégica</p><div class="nota-recurso">📦 <strong>Descargar:</strong> <a href="secciones/Modulo_1_Planificacion/Analisis_Equipos_1/recurso_53294.zip" download>ANALISIS Y SEGUIMIENTO 2</a></div>
|
||||
@@ -1107,8 +1163,16 @@ body {
|
||||
<span>🎬 <strong>Armado K1 .De Checco</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/876705933"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/MX_video_876705933.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>VIDEO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-analisis-del-opuesto-3">4. Análisis del Opuesto</h3>
|
||||
<p>Video</p><div class="video-viewer-wrap collapsed">
|
||||
@@ -1314,8 +1378,16 @@ body {
|
||||
<span>🎬 <strong>ANÁLISIS Y SEGUIMIENTO 3 - EXPLICACIÓN DEL TP</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1176900332"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/MX_video_1176900332.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-trabajo-practico-analisis-y-seguimiento-1">2. TRABAJO PRACTICO ANALISIS Y SEGUIMIENTO</h3>
|
||||
<p><u>PLANIFICACIÓNDEL PARTIDO: </u>SISTEMA BLOQUEO-DEFENSA </p><div class="nota-recurso">📦 <strong>Descargar:</strong> <a href="secciones/Modulo_1_Planificacion/TP_Final_Unidad/recurso_53296.ppt" download>TRABAJO PRACTICO ANALISIS Y SEGUIMIENTO</a></div>
|
||||
@@ -1358,8 +1430,16 @@ body {
|
||||
<span>🎬 <strong>PRIORIDAD EN EL BLOQUEO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919369433"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_PRIORIDAD_EN_EL_BLOQUEO.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>PRIORIDAD EN EL BLOQUEO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-centrales-y-opuestos-3">4. ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS</h3>
|
||||
@@ -1368,8 +1448,16 @@ body {
|
||||
<span>🎬 <strong>ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1179197191"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_1179197191.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-ataque-b-4">5. ATAQUE B</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1377,8 +1465,16 @@ body {
|
||||
<span>🎬 <strong>ATAQUE B</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919341704"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_ATAQUE_B.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>ATAQUE B</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-b-con-recepcion-admiracion-5">6. B CON RECEPCION ADMIRACION</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1386,8 +1482,16 @@ body {
|
||||
<span>🎬 <strong>B CON RECEPCION ADMIRACION</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919342668"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919342668.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>B CON RECEPCION ADMIRACION<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-la-b-mantiene-la-distancia-6">7. LA B MANTIENE LA DISTANCIA</h3>
|
||||
@@ -1396,8 +1500,16 @@ body {
|
||||
<span>🎬 <strong>LA B MANTIENE LA DISTANCIA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919346562"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919346562.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>LA B MANTIENE LA DISTANCIA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-recepcion-perfecta-7">8. HATU RECEPCION PERFECTA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1405,8 +1517,16 @@ body {
|
||||
<span>🎬 <strong>HATU RECEPCION PERFECTA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919347866"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HATU_RECEPCION_PERFECTA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HATU RECEPCION PERFECTA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-con-pelota-separada-8">9. HATU CON PELOTA SEPARADA</h3>
|
||||
@@ -1415,8 +1535,16 @@ body {
|
||||
<span>🎬 <strong>HATU CON PELOTA SEPARADA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919348493"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HATU_CON_PELOTA_SEPARADA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HATU CON PELOTA SEPARADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-marcada-9">10. HATU MARCADA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1424,8 +1552,16 @@ body {
|
||||
<span>🎬 <strong>HATU MARCADA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919351892"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HATU_MARCADA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HATU MARCADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatumarcada-bien-atacada-10">11. HATUMARCADA BIEN ATACADA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1433,8 +1569,16 @@ body {
|
||||
<span>🎬 <strong>HATUMARCADA BIEN ATACADA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919352848"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HATUMARCADA_BIEN_ATACADA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HATU MARCADA BIEN ATACADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-bien-hecha-11">12. HATU BIEN HECHA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1442,8 +1586,16 @@ body {
|
||||
<span>🎬 <strong>HATU BIEN HECHA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919353448"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HATU_BIEN_HECHA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HATU BIEN HECHA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-positiva-12">13. HANA POSITIVA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1451,8 +1603,16 @@ body {
|
||||
<span>🎬 <strong>HANA POSITIVA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919354134"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HANA_POSITIVA.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HANA POSITIVA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hanati-con-recepcion-separada-13">14. HANATI CON RECEPCION SEPARADA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1460,8 +1620,16 @@ body {
|
||||
<span>🎬 <strong>HANATI CON RECEPCION SEPARADA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919355668"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919355668.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HANATI CON RECEPCION SEPARADA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-recepcion-a-2-14">15. HANA RECEPCION A 2</h3>
|
||||
@@ -1470,8 +1638,16 @@ body {
|
||||
<span>🎬 <strong>HANA RECEPCION A 2</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919356423"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_HANA_RECEPCION_A_2.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HANA RECEPCION A 2</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-beti-a-un-pie-atras-15">16. BETI A UN PIE ATRAS</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1479,8 +1655,16 @@ body {
|
||||
<span>🎬 <strong>BETI A UN PIE ATRAS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919357109"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_BETI_A_UN_PIE_ATRAS.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>BETI A UN PIE ATRAS</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-beti-en-juego-16">17. BETI EN JUEGO</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1488,8 +1672,16 @@ body {
|
||||
<span>🎬 <strong>BETI EN JUEGO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919358607"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_BETI_EN_JUEGO.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>BETI EN JUEGO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-central-al-medio-con-recepcion-a-2-17">18. CENTRAL AL MEDIO CON RECEPCION A 2</h3>
|
||||
@@ -1498,8 +1690,16 @@ body {
|
||||
<span>🎬 <strong>CENTRAL AL MEDIO CON RECEPCION A 2</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919359386"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919359386.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>CENTRAL AL MEDIO CON RECEPCION A 2</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hanati-volada-con-recepcion-a-4-18">19. HANATI VOLADA CON RECEPCION A 4</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1507,8 +1707,16 @@ body {
|
||||
<span>🎬 <strong>HANATI VOLADA CON RECEPCION A 4</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919359855"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919359855.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HANATI VOLADA CON RECEPCION A 4</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-con-recepcion-a-2-separada-19">20. HANA CON RECEPCION A 2 SEPARADA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1516,8 +1724,16 @@ body {
|
||||
<span>🎬 <strong>HANA CON RECEPCION A 2 SEPARADA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919360318"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919360318.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>HANA CON RECEPCION A 2 SEPARADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-apoyo-0-20">21. APOYO 0</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1525,8 +1741,16 @@ body {
|
||||
<span>🎬 <strong>APOYO 0</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919363158"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_APOYO_0.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>APOYO 0</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-central-ataca-de-segunda-entrenamiento-del-tiempo-21">22. CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1534,8 +1758,16 @@ body {
|
||||
<span>🎬 <strong>CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919363728"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919363728.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-skipped-step-22">23. SKIPPED STEP</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1543,8 +1775,16 @@ body {
|
||||
<span>🎬 <strong>SKIPPED STEP</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919364522"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_SKIPPED_STEP.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>PASO SALTADO PARA CAER DEL BLOQUEO Y SALIR A ATACAR</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-global-tecnico-con-el-central-23">24. GLOBAL TECNICO CON EL CENTRAL</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1552,8 +1792,16 @@ body {
|
||||
<span>🎬 <strong>GLOBAL TECNICO CON EL CENTRAL</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919365485"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919365485.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>EJERCICIO GLOBAL TECNICO CON EL CENTRAL<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-visualizacion-del-central-en-bloqueo-24">25. VISUALIZACION DEL CENTRAL EN BLOQUEO</h3>
|
||||
@@ -1562,8 +1810,16 @@ body {
|
||||
<span>🎬 <strong>VISUALIZACION DEL CENTRAL EN BLOQUEO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/919366263"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Centrales_y_Oponentes_video_919366263.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>VISUALIZACION DEL CENTRAL EN BLOQUEO</p><h2 class="seccion-titulo" id="sec-puntas-y-liberos-as">Puntas y Liberos/as</h2>
|
||||
<h3 class="tema-titulo" id="tema-puntas-y-liberos-as-0">1. PUNTAS Y LÍBEROS/AS</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1571,8 +1827,16 @@ body {
|
||||
<span>🎬 <strong>PUNTAS Y LÍBEROS/AS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1179888270"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_PUNTAS_Y_LÍBEROS_AS.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-split-step-1">2. SPLIT STEP</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1580,8 +1844,16 @@ body {
|
||||
<span>🎬 <strong>SPLIT STEP</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921876274"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_SPLIT_STEP.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>SPLIT STEP</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-los-puntas-receptores-y-el-libero-2">3. LOS PUNTAS RECEPTORES Y EL LIBERO</h3>
|
||||
<p>PUNTAS RECEPTORES Y LIBEROS</p><div class="pdf-viewer-wrap collapsed">
|
||||
@@ -1599,8 +1871,16 @@ body {
|
||||
<span>🎬 <strong>CARRERA DE ATAQUE DESDE 6 A 4</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921873304"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921873304.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>CARRERA DE ATAQUE DE 6 A 4</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-contrataque-despues-de-caer-de-bloqueo-4">5. CONTRATAQUE DESPUES DE CAER DE BLOQUEO</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1608,8 +1888,16 @@ body {
|
||||
<span>🎬 <strong>CONTRATAQUE DESPUES DE CAER DE BLOQUEO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921873724"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921873724.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>CONTRATAQUE DESPUES DE CAER DE BLOQUEO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-contrataque-por-4-despues-de-caer-de-bloqueo-5">6. CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1617,8 +1905,16 @@ body {
|
||||
<span>🎬 <strong>CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921873953"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921873953.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>ATAQUE DESPUES DE BLOQUEAR</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-evaluacion-posicional-6">7. EVALUACION POSICIONAL</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1626,8 +1922,16 @@ body {
|
||||
<span>🎬 <strong>EVALUACION POSICIONAL</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921874753"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_EVALUACION_POSICIONAL.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>EVALUACION POSICIONAL</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-global-tecnico-de-la-pipe-7">8. GLOBAL TECNICO DE LA PIPE</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1635,8 +1939,16 @@ body {
|
||||
<span>🎬 <strong>GLOBAL TECNICO DE LA PIPE</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921875020"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_GLOBAL_TECNICO_DE_LA_PIPE.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>GLOBAL TECNICO DE LA PIPE</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-de-massimino-con-saque-de-la-maquina-8">9. RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1644,8 +1956,16 @@ body {
|
||||
<span>🎬 <strong>RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921875302"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921875302.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-sobre-la-linea-saliendo-de-adentro-9">10. RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</h3>
|
||||
@@ -1654,8 +1974,16 @@ body {
|
||||
<span>🎬 <strong>RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921875519"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921875519.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-y-ataque-por-4-saliendo-de-adentro-10">11. RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1663,8 +1991,16 @@ body {
|
||||
<span>🎬 <strong>RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921875778"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921875778.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-tipo-de-combinaciones-que-juegan-los-puntas-11">12. TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS</h3>
|
||||
@@ -1673,8 +2009,16 @@ body {
|
||||
<span>🎬 <strong>TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921879520"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921879520.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>COMBINACIONES DE LOS PUNTAS<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-ataque-de-la-pipe-por-distancia-o-tiempo-12">13. ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</h3>
|
||||
@@ -1683,8 +2027,16 @@ body {
|
||||
<span>🎬 <strong>ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/921879925"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Puntas_y_Liberos_video_921879925.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</p><h2 class="seccion-titulo" id="sec-entrenamiento-de-los-y-las-armadoras">Entrenamiento de los y las Armadoras</h2>
|
||||
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-y-las-armadoras-0">1. ENTRENAMIENTO DE LOS Y LAS ARMADORAS</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1692,8 +2044,16 @@ body {
|
||||
<span>🎬 <strong>ENTRENAMIENTO DE LOS Y LAS ARMADORAS</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1181188693"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Entrenamiento_Armadoras_video_1181188693.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>clase en vivo</p><h2 class="seccion-titulo" id="sec-explicacion-del-trabajo-practico-a-presentar">Explicación del Trabajo Práctico a Presentar</h2>
|
||||
<h3 class="tema-titulo" id="tema-explicacion-del-trabajo-practico-a-presentar-0">1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</h3>
|
||||
<div class="video-viewer-wrap collapsed">
|
||||
@@ -1701,8 +2061,16 @@ body {
|
||||
<span>🎬 <strong>EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</strong></span>
|
||||
<span class="video-toggle">▼</span>
|
||||
</div>
|
||||
<div class="video-container">
|
||||
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/1181892359"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>
|
||||
<div class="video-container"><video controls preload="metadata"><source src="videos_offline/M2_Explicacion_TP_video_1181892359.mp4" type="video/mp4">Tu navegador no soporta video HTML5.</video></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>clase en vivo</p>
|
||||
</div>
|
||||
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,64 @@
|
||||
import { chromium } from "playwright";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const SESSION_FILE = path.join(__dirname, "session.json");
|
||||
|
||||
const FALTANTES = [
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50320.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_46541.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50142.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50145.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50144.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50139.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50140.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50143.pdf" },
|
||||
{ url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50141.pdf" },
|
||||
];
|
||||
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true });
|
||||
const context = await browser.newContext({ storageState: fs.existsSync(SESSION_FILE) ? SESSION_FILE : undefined, acceptDownloads: true });
|
||||
const page = await context.newPage();
|
||||
|
||||
console.log("Chequeando sesión...");
|
||||
await page.goto("https://voley.onlineeducation.center/es/campus/student/training/e/14197");
|
||||
if (page.url().includes("login")) {
|
||||
console.log("Sesion expirada, iniciando login...");
|
||||
await page.waitForSelector("#login-email", { timeout: 15000 });
|
||||
await page.fill("#login-email", "saldis_karina@hotmail.com");
|
||||
await page.fill("#login-password", "Martes13#");
|
||||
await page.click("#btn-login");
|
||||
await page.waitForURL("**/es/campus/**", { timeout: 30000 });
|
||||
console.log("Login exitoso, guardando sesión...");
|
||||
await context.storageState({ path: SESSION_FILE });
|
||||
}
|
||||
|
||||
for (const f of FALTANTES) {
|
||||
const fullDest = path.join(__dirname, f.dest);
|
||||
if (fs.existsSync(fullDest)) {
|
||||
console.log("Ya existe:", f.dest);
|
||||
continue;
|
||||
}
|
||||
console.log("Navegando a", f.url);
|
||||
try {
|
||||
const [download] = await Promise.all([
|
||||
page.waitForEvent('download', { timeout: 10000 }),
|
||||
page.goto(f.url).catch(e => {}) // catch the 'download is starting' navigation error
|
||||
]);
|
||||
await download.saveAs(fullDest);
|
||||
console.log("Guardado como descarga:", fullDest);
|
||||
} catch (e) {
|
||||
// No disparó descarga, debe ser una página
|
||||
try {
|
||||
await page.goto(f.url, { waitUntil: 'networkidle', timeout: 10000 });
|
||||
} catch (e2) {}
|
||||
await page.pdf({ path: fullDest, format: 'A4' });
|
||||
console.log("Guardado como PDF renderizado:", fullDest);
|
||||
}
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
})();
|
||||
@@ -0,0 +1,7 @@
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
// We'll read the existing script and eval its MODULOS building logic, or just run it and capture...
|
||||
@@ -0,0 +1,51 @@
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const seccionesDir = path.join(__dirname, "descargas", "secciones");
|
||||
const videosOfflineDir = path.join(__dirname, "descargas", "videos_offline");
|
||||
const mapaPath = path.join(__dirname, ".mapa_videos.json");
|
||||
|
||||
if (!fs.existsSync(videosOfflineDir)) fs.mkdirSync(videosOfflineDir, { recursive: true });
|
||||
|
||||
let mapa = {};
|
||||
try {
|
||||
if (fs.existsSync(mapaPath)) {
|
||||
mapa = JSON.parse(fs.readFileSync(mapaPath, "utf-8"));
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
// Find all MX_video_*.mp4 in secciones
|
||||
function findVideos(dir) {
|
||||
let results = [];
|
||||
const list = fs.readdirSync(dir);
|
||||
for (const file of list) {
|
||||
const filePath = path.join(dir, file);
|
||||
const stat = fs.statSync(filePath);
|
||||
if (stat && stat.isDirectory()) {
|
||||
results = results.concat(findVideos(filePath));
|
||||
} else if (file.startsWith("MX_video_") ) {
|
||||
results.push(filePath);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
const videos = findVideos(seccionesDir);
|
||||
for (const vidPath of videos) {
|
||||
const filename = path.basename(vidPath);
|
||||
// Extact ID: MX_video_1175436659.mp4
|
||||
const match = filename.match(/MX_video_(\d+)/);
|
||||
if (match) {
|
||||
const vimeoID = match[1];
|
||||
const newPath = path.join(videosOfflineDir, filename);
|
||||
fs.renameSync(vidPath, newPath);
|
||||
console.log(`Movido: ${filename} a videos_offline`);
|
||||
mapa[vimeoID] = filename;
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFileSync(mapaPath, JSON.stringify(mapa, null, 2));
|
||||
console.log("Mapa de videos actualizado.");
|
||||
@@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Fija los videos en LIBRO_DE_ESTUDIO.html
|
||||
* Reemplaza <video> tags con Vimeo iframe embebido + fallback a video local
|
||||
* Mapeo manual para garantizar correspondencia correcta
|
||||
*/
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const LIBRO = path.join(__dirname, "descargas", "LIBRO_DE_ESTUDIO.html");
|
||||
|
||||
/**
|
||||
* MAPA MANUAL: nombre del archivo videos_offline/*.mp4 → ID de Vimeo
|
||||
* Los videos con "video_NUMERO.mp4" ya llevan el ID en el nombre.
|
||||
* Los videos con nombre descriptivo se mapean manualmente según el orden
|
||||
* en que aparecen en las secciones del curso.
|
||||
*/
|
||||
const MAPA = {
|
||||
// ── Módulo 1: Planificación ──
|
||||
"M1_Planificacion_PLANIFICACIÓN.mp4": "1170245111",
|
||||
"M1_Preparacion_Atletica_PREPARACIÓN_ATLÉTICA.mp4": "1173231315",
|
||||
|
||||
// ── Módulo 2: Centrales y Opuestos ──
|
||||
"M2_Centrales_y_Oponentes_PRIORIDAD_EN_EL_BLOQUEO.mp4": "919369433",
|
||||
"M2_Centrales_y_Oponentes_ATAQUE_B.mp4": "919341704",
|
||||
"M2_Centrales_y_Oponentes_HATU_RECEPCION_PERFECTA.mp4": "919347866",
|
||||
"M2_Centrales_y_Oponentes_HATU_CON_PELOTA_SEPARADA.mp4": "919348493",
|
||||
"M2_Centrales_y_Oponentes_HATU_MARCADA.mp4": "919351892",
|
||||
"M2_Centrales_y_Oponentes_HATUMARCADA_BIEN_ATACADA.mp4": "919352848",
|
||||
"M2_Centrales_y_Oponentes_HATU_BIEN_HECHA.mp4": "919353448",
|
||||
"M2_Centrales_y_Oponentes_HANA_POSITIVA.mp4": "919354134",
|
||||
"M2_Centrales_y_Oponentes_HANA_RECEPCION_A_2.mp4": "919356423",
|
||||
"M2_Centrales_y_Oponentes_BETI_A_UN_PIE_ATRAS.mp4": "919357109",
|
||||
"M2_Centrales_y_Oponentes_BETI_EN_JUEGO.mp4": "919358607",
|
||||
"M2_Centrales_y_Oponentes_APOYO_0.mp4": "919363158",
|
||||
"M2_Centrales_y_Oponentes_SKIPPED_STEP.mp4": "919364522",
|
||||
|
||||
// ── Módulo 2: Puntas y Liberos ──
|
||||
"M2_Puntas_y_Liberos_PUNTAS_Y_LÍBEROS_AS.mp4": "1179888270",
|
||||
"M2_Puntas_y_Liberos_SPLIT_STEP.mp4": "921876274",
|
||||
"M2_Puntas_y_Liberos_EVALUACION_POSICIONAL.mp4": "921874753",
|
||||
"M2_Puntas_y_Liberos_GLOBAL_TECNICO_DE_LA_PIPE.mp4": "921875020",
|
||||
};
|
||||
|
||||
for (let i = 1; i <= 23; i++) {
|
||||
const key = `M2_Centrales_y_Oponentes_video_9193${String(i).padStart(2, "0")}XXX`;
|
||||
// Ya están cubiertos los que tienen video_ID en el nombre
|
||||
}
|
||||
|
||||
function buildVideoMap() {
|
||||
const libro = fs.readFileSync(LIBRO, "utf-8");
|
||||
const videoRefs = [...libro.matchAll(/videos_offline\/([^"']+\.mp4)/g)].map(
|
||||
(m) => m[1],
|
||||
);
|
||||
const finalMap = {};
|
||||
let ok = 0,
|
||||
fail = 0;
|
||||
|
||||
for (const ref of videoRefs) {
|
||||
// Si tiene video_NUMERO en el filename, extraer el ID
|
||||
const idMatch = ref.match(/video_(\d+)\.mp4/);
|
||||
if (idMatch) {
|
||||
finalMap[ref] = idMatch[1];
|
||||
ok++;
|
||||
} else if (MAPA[ref]) {
|
||||
finalMap[ref] = MAPA[ref];
|
||||
ok++;
|
||||
} else {
|
||||
console.log(` ⚠ SIN MAPA: ${ref}`);
|
||||
fail++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n📊 Total: ${ok} mapeados, ${fail} sin mapa\n`);
|
||||
return { finalMap, videoRefs };
|
||||
}
|
||||
|
||||
function fixLibro() {
|
||||
const { finalMap, videoRefs } = buildVideoMap();
|
||||
let html = fs.readFileSync(LIBRO, "utf-8");
|
||||
const originalSize = html.length;
|
||||
|
||||
const videoRegex =
|
||||
/<div class="video-container">\s*<video[^>]*>[\s\S]*?<\/video>\s*<\/div>/gs;
|
||||
const matches = [];
|
||||
let match;
|
||||
while ((match = videoRegex.exec(html)) !== null) {
|
||||
matches.push({
|
||||
full: match[0],
|
||||
index: match.index,
|
||||
src: match[0].match(/videos_offline\/([^"']+)/)?.[1] || "",
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Procesando ${matches.length} videos...\n`);
|
||||
|
||||
let replaced = 0,
|
||||
failed = 0;
|
||||
for (const m of matches.reverse()) {
|
||||
const vimeoId = finalMap[m.src];
|
||||
if (!vimeoId) {
|
||||
failed++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const vimeoEmbed = `<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:10px;border-radius:8px;background:#000;">
|
||||
<iframe src="https://player.vimeo.com/video/${vimeoId}"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
|
||||
allow="autoplay;fullscreen;picture-in-picture" allowfullscreen loading="lazy">
|
||||
</iframe>
|
||||
</div>`;
|
||||
|
||||
const replacement = `<div class="video-container">
|
||||
${vimeoEmbed}
|
||||
${m.full}
|
||||
</div>`;
|
||||
|
||||
html =
|
||||
html.substring(0, m.index) +
|
||||
replacement +
|
||||
html.substring(m.index + m.full.length);
|
||||
replaced++;
|
||||
}
|
||||
|
||||
console.log(`✅ ${replaced} videos con reproductor Vimeo`);
|
||||
if (failed > 0)
|
||||
console.log(`⚠ ${failed} videos sin mapear (mantenidos como locales)`);
|
||||
|
||||
fs.writeFileSync(LIBRO, html, "utf-8");
|
||||
console.log(
|
||||
`✅ LIBRO_DE_ESTUDIO.html actualizado (${originalSize} → ${html.length} bytes)`,
|
||||
);
|
||||
}
|
||||
|
||||
fixLibro();
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
||||
# Recursos Pendientes de Descarga
|
||||
|
||||
Lista de todos los materiales que faltan para alcanzar el 100% offline.
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const p = 'descargar-curso/.mapa_videos.json';
|
||||
let m = {};
|
||||
try {
|
||||
if (fs.existsSync(p)) {
|
||||
m = JSON.parse(fs.readFileSync(p, 'utf-8'));
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const files = fs.readdirSync('descargar-curso/descargas/videos_offline');
|
||||
for (const f of files) {
|
||||
const match = f.match(/MX_video_(\d+)/);
|
||||
if (match) {
|
||||
m[match[1]] = f;
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(p, JSON.stringify(m, null, 2), "utf-8");
|
||||
console.log("Map rebuilt.");
|
||||
@@ -0,0 +1,5 @@
|
||||
const fs = require('fs');
|
||||
const p = 'descargar-curso/.mapa_videos.json';
|
||||
const m = JSON.parse(fs.readFileSync(p, 'utf-8'));
|
||||
m['1175436659'] = 'MX_video_1175436659.mp4';
|
||||
fs.writeFileSync(p, JSON.stringify(m, null, 2));
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="refresh" content="0; url=descargar-curso/descargas/LIBRO_DE_ESTUDIO.html">
|
||||
<title>Redirigiendo a KSALDIS-DT...</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
background-color: #fdfdfd;
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirigiendo al Dashboard del curso...</p>
|
||||
<script>
|
||||
window.location.replace("descargar-curso/descargas/LIBRO_DE_ESTUDIO.html");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,58 @@
|
||||
import fs from 'fs';
|
||||
|
||||
const dbPath = 'descargar-curso/.mapa_videos.json';
|
||||
const db = JSON.parse(fs.readFileSync(dbPath, 'utf-8'));
|
||||
|
||||
let total = 0;
|
||||
let downloaded = 0;
|
||||
let missing = [];
|
||||
|
||||
for (const mod of db.modulos) {
|
||||
for (const sec of mod.secciones) {
|
||||
for (const tema of sec.temas) {
|
||||
|
||||
// Text contents
|
||||
if (tema.contenido_html) {
|
||||
total++;
|
||||
const htmlPath = `descargar-curso/descargas/secciones/${mod.carpeta}/${sec.carpeta}/${tema.contenido_html}`;
|
||||
if (fs.existsSync(htmlPath)) {
|
||||
downloaded++;
|
||||
} else {
|
||||
missing.push(`[Texto] ${tema.titulo}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Videos
|
||||
if (tema.videos && tema.videos.length > 0) {
|
||||
tema.videos.forEach(v => {
|
||||
total++;
|
||||
const videoPath = `descargar-curso/descargas/secciones/${mod.carpeta}/${sec.carpeta}/${v.archivo_local}`;
|
||||
if (fs.existsSync(videoPath)) {
|
||||
downloaded++;
|
||||
} else {
|
||||
missing.push(`[Video] ${v.titulo}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Resources
|
||||
if (tema.recursos && tema.recursos.length > 0) {
|
||||
tema.recursos.forEach(r => {
|
||||
total++;
|
||||
const recursoPath = `descargar-curso/descargas/secciones/${mod.carpeta}/${sec.carpeta}/${r.archivo_local}`;
|
||||
if (fs.existsSync(recursoPath)) {
|
||||
downloaded++;
|
||||
} else {
|
||||
missing.push(`[Recurso] ${r.titulo} (Esperado: ${r.archivo_local})`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Total: ${total}`);
|
||||
console.log(`Downloaded: ${downloaded}`);
|
||||
console.log(`Missing: ${total - downloaded}`);
|
||||
console.log("Missing Items:");
|
||||
missing.forEach(m => console.log(" - " + m));
|
||||
Reference in New Issue
Block a user