Wavecast Radio

El reproductor de pie fijo (<podcast-footer>) debe estar presente en la plantilla base de tu sitio para la persistencia entre páginas.

Añadir el Pie de Página

Añade este elemento justo antes de </body> en layouts/_default/baseof.html:

<p/oddhpdaaxoctt-daaapcs--ratttes-uustfrre-obbrfooovotl-eoeip>trneekrrism>d-a=pn"eeprnomtdacnaesntt-footer"

Atributos de Framework

Los atributos data-turbolinks-permanent, data-turbo-permanent y hx-preserve aseguran que el pie sobreviva a la navegación al usar estos frameworks:

FrameworkAtributoQué hace
Turbolinksdata-turbolinks-permanentEvita que Turbolinks reemplace el pie en la navegación
Turbodata-turbo-permanentEvita que Turbo Drive transforme/reemplace el pie
htmxhx-preserveIndica a htmx que preserve el elemento durante intercambios DOM

Si no usas ninguno de estos frameworks, omite esos atributos: el pie persistirá mediante sessionStorage para cargas de página vanilla.

Cómo Funciona la Persistencia

El reproductor sobrevive a las navegaciones usando múltiples estrategias:

  1. Ganchos de framework: data-turbolinks-permanent / data-turbo-permanent / hx-preserve mantienen vivo el elemento DOM del pie durante navegaciones SPA
  2. Respaldo sessionStorage: Estado guardado en sessionStorage en beforeunload, restaurado en la siguiente carga
  3. HTML vanilla: Las cargas de página tradicionales restauran posición, volumen, silencio y velocidad desde sessionStorage

Estado Guardado

CampoDescripción
currentTimePosición de reproducción en segundos
pausedSi el audio estaba pausado
volumeNivel de volumen (0–1)
mutedEstado de silencio
playbackRateVelocidad de reproducción

Reglas de Restauración de Posición

  • Coincidencia exacta de URL: La posición solo se restaura cuando el src guardado coincide con el del elemento actual
  • Protección de antigüedad: Posiciones de más de 1 hora se descartan
  • Estimación en pausa: Si el audio estaba pausado, la posición se restaura tal cual
  • Estimación en reproducción: Si estaba reproduciendo, el tiempo transcurrido desde el guardado se añade
  • Diferido a loadedmetadata: La posición se establece solo después de que el navegador informe que la duración es conocida

Integración con Alternancia de Tema

Si tu sitio tiene un toggle de tema claro/oscuro, asegúrate de que las propiedades CSS del pie respondan a tu cambio de tema. El elemento <podcast-footer> responde automáticamente a estos selectores:

[.h}dttahmSteleam[l-edEet-alchdtteaaromr-erektpe=hrs"peodomdiadeunrc=ctka"te"sdog]tarr-rapfkadoo"podo]lsctiaepcasroat,dl-cvofaasosrotiqt-auefberol,oeetslerdree{ptreomdaucotsocrurroesponde

Si tu tema usa nombres de atributos diferentes, añade tus propias reglas:

b}b}#Ctmac#E---`{>{>oo#uíona#l`{}{}ddatsieOU``<stu}<stu}y--y--TnutmVpmn"grirrir.pp.ppídlradiiianopctlpctldoodootooaceneto-o=l=o=l=addadduriciUnhd"e"d"e"rccrccludóvupdRetch=hch=nkaakaaonetnuleoL"mat"tat"ossssslo.ear,:`lstTtstTnpttpttedlrs:-tprptpreo--o--DppoEtidet-sas-sa"dppdppeiilaeseleep:n:p:ncllcllsseeltrlml/s/l/saaaaaapo,lcaeiepa/m/a/msyysyyldoPnvnelyeieyeiteeteeaietmtitalnaexsxexs-rr-rrzolepreedaltraiaraif--p--axouocaemómmóobtlbtbettrnmecpnppnogeagelníotcuaelllt:xy:xet.aaeuaeeeeeetetsrummstps.n..nr#:r#:elLiitoueccc11pooeermnovoov{e#{e#rsnnaátomimmi1e1eostttac/v/ve0e0detoouiussso2e2euíncalt"ht"e0e0cdtrcaatror;e;eceueomeaewe00islsnpesasa;;ópopenapm/mnlseeqto.l.atlueUrmimtzcaie:RpvpiaopñLc3e3er`sae.o"""nhtpilmeoorseAprse.tecluifineenzseqlptoeruatotnseca.ítr-tetaera`Úulneahtlmdddptioeeueutlnrcnpmtieft:páezdua/asa-e/rdnmna`aleotl,antetrfoid`rgoro(ihaormnertnma:letsqalcpmumrdtsieaeeoo:sundmr/iettuiioloecn`nmeieáás`opysrti,aeinddrdacqerueauletdearepsdsaaeedrrlriaveoialdraeoctnrhiivvdvaieosvoadauelsdiiasnoui)dtpiiáboogaij(qnoeuajee.dlee`mtspeíriptceiu=csl"eoohndtidtpoepo.lsr:e/`p//ie`sx,oadm`ip#ol`.e.Pcoo`rm.`de.epfiescotdoese/sftoao.emtpi3q"u`etparoedsucueneelnleancleacael`dhitrtepcst:o/r/ieoxapmapdlree.cdoeml/eapricshoidveos/d`e).audio.Elparámetro`url`delshortcodesobrescribeuocultaelenlace:

El mismo atributo puede establecerse en el <podcast-footer url="..."> de nivel superior para sobrescribir lo que envíe el reproductor en línea. Las URL se sanitizan en tiempo de compilación y de ejecución; solo se aceptan los esquemas http y https al renderizar el enlace.

Tamaño del Pie

El atributo size en <podcast-footer> controla el tamaño visual de la barra. Hay tres preajustes disponibles:

  • size="small" (por defecto): la barra compacta actual. Portada de 36px, columna de info de 140px, botones de 32px. Omitir el atributo size es equivalente a size="small".
  • size="medium": una barra más ancha con portada de 48px, columna de info de 240px, botones de 36px y fuentes ligeramente más grandes.
  • size="large": un banner de ancho completo con portada de 64px, columna de info de 400px, botones de 44-56px y las fuentes más grandes.
<podcast-footer id="podcast-footer" size="medium" data-turbo-permanent></podcast-footer>

En pantallas de menos de 768px de ancho, los tres tamaños colapsan al mismo diseño compacto que size="small" produce en escritorio. Los valores desconocidos (size="huge", etc.) vuelven al diseño small por defecto.

El atributo es puramente visual. La persistencia, la reproducción y la URL de la fuente de audio no se ven afectadas por size. Las variables de tema (--podcast-player-bg, --podcast-player-text, etc.) siguen funcionando como antes.

Ejemplo: Sección de Pie en baseof.html Completa

<<!h/Dt<<hOmh/b/tCle<<<ho{<<bmTamt!ed{!p/olYldei-ay-oddhpd>Pa>tt-d>b-daaxoyEnal>lctt-d>gecoRaaapch=c>oces--rat"h{nkptttesm{a{tr-uustl{re"ofrre->sbnmdobbrf.eliauooovoStodictl-eoi=conteip>tt"k"orneeeudrkrr.t"e.ism>Lftldd-aa-i}e=pnn8th}"eeg"le{pprnu>ea{iomta"dedag.ecne..naeC.dsno}ttd}}-e{}f{o}o}.t"Se>irt"e.Title}}{{end}}</title>

Próximos Pasos