vers. 2.3.0

This commit is contained in:
alexspeaker committed 2026-02-06 22:13:10 +01:00
1 parent ae5a4a8153
commit 2b0b457166
9 files changed
+137 -47

No files matched your search

+2 -1
View File
@@ -1,4 +1,5 @@
*:Zone.Identifier
*Zone.Identifier
*.old
/api/*
/api/*
.htaccess
+6 -5
View File
@@ -112,7 +112,7 @@ div.dbox_mobile {
div.dbox_mobile {
width: 90%;
max-width: 450px;
max-width: 750px;
color: white;
border-radius: 10px;
max-height: 475px;
@@ -163,7 +163,7 @@ div.dfooter {
.appBody {
background-color: #10194b;
max-width: 450px;
max-width: 750px;
min-width: 330px;
margin: auto;
display: flex;
@@ -313,7 +313,7 @@ iframe.contentplayer {
left: 50%;
height: calc(100vh - 312px);
width: 100%;
max-width: 450px;
max-width: 750px;
transform: translateX(-50%);
}
@@ -326,7 +326,7 @@ iframe.contentplayer {
left: 50%;
transform: translateX(-50%);
width: 100%;
max-width: 450px;
max-width: 750px;
height: 100px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
@@ -337,7 +337,8 @@ iframe.contentplayer {
border-radius: 5px;
}
button#playPauseBtn {
button#playPauseBtn,
button#formatToggleBtn {
background: none;
border: none;
}
+39 -29
View File
@@ -2,10 +2,20 @@
<changelog>
<version>
<number>2.3.0</number>
<logs>
<log>Ottimizzata la risoluzione dell'applicazione su dispositivi larghi (tablet, iPad e computer).</log>
<log>Implementato lo switch tra il player audio in HLS e il player audio in MP3/AAC.</log>
<log>Rimosso l'avviso per i dispositivi iOS.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
<version>
<number>2.2.0 (d)</number>
<logs>
<log>E' stato reintrodotto la schermata di caricamento ad ogni selezione di ogni pagina dell'applicazione</log>
<log>E' stato reintrodotto la schermata di caricamento ad ogni selezione di ogni pagina dell'applicazione.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -13,7 +23,7 @@
<version>
<number>2.1.4</number>
<logs>
<log>Corretto la visione verticale sui dispositivi mobili</log>
<log>Corretto la visione verticale sui dispositivi mobili.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -29,7 +39,7 @@
<version>
<number>2.1.2</number>
<logs>
<log>Implementazione del sistema di qualità adattiva (ABR) per il player audio</log>
<log>Implementazione del sistema di qualità adattiva (ABR) per il player audio.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -37,7 +47,7 @@
<version>
<number>2.1.1</number>
<logs>
<log>Corretti alcuni bug che impedivano l'accesso al player dal link esterno</log>
<log>Corretti alcuni bug che impedivano l'accesso al player dal link esterno.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -45,8 +55,8 @@
<version>
<number>2.1.0</number>
<logs>
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi nella navigazione in app</log>
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi di riproduzione audio al player</log>
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi nella navigazione in app.</log>
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi di riproduzione audio al player.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -62,8 +72,8 @@
<version>
<number>2.0.3</number>
<logs>
<log>Corretta la visualizzazione dei contenuti forniti dalle emittenti all'interno del player</log>
<log>Corretta la visualizzazione del player audio</log>
<log>Corretta la visualizzazione dei contenuti forniti dalle emittenti all'interno del player.</log>
<log>Corretta la visualizzazione del player audio.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -71,7 +81,7 @@
<version>
<number>2.0.2</number>
<logs>
<log>Inserita la pagina statica per le emittenti tematiche</log>
<log>Inserita la pagina statica per le emittenti tematiche.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -79,7 +89,7 @@
<version>
<number>2.0.1</number>
<logs>
<log>Aggiunta la Visual Radio dell'emittente "Radio Città 105</log>
<log>Aggiunta la Visual Radio dell'emittente "Radio Città 105".</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -87,7 +97,7 @@
<version>
<number>2.0.0</number>
<logs>
<log>Nuova UI/UX: RPIGroup aggiorna la veste grafica della sua applicazione, rendendola più "fumettosa" e "giocattolosa". Un'estetica completamente diversa da tutte le altre varie app radiofoniche</log>
<log>Nuova UI/UX: RPIGroup aggiorna la veste grafica della sua applicazione, rendendola più "fumettosa" e "giocattolosa". Un'estetica completamente diversa da tutte le altre varie app radiofoniche.</log>
<log>Nuova Engine: Nuovo motore e struttura dell'applicazione. Lato backend è cambiato completamente rispetto alla versione 1.</log>
<log>Nuovo Player Audio/Video: Player più semplice, ma conserva le caratteristiche della precedente versione.</log>
<log>Termini e Condizioni: inserimento per obblighi di legge dei corrispettivi "Termini e Condizioni"</log>
@@ -108,7 +118,7 @@
<version>
<number>1.2.0 Stable</number>
<logs>
<log>Implementato il "Media Sessions" che permette di visualizzare la radio in riproduzione nel centro notifiche su iOS e Android</log>
<log>Implementato il "Media Sessions" che permette di visualizzare la radio in riproduzione nel centro notifiche su iOS e Android.</log>
<log>Preparazione dell'ottimizzazione del software in occasione della terza versione dell'app.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
@@ -126,9 +136,9 @@
<version>
<number>1.1.0 Stable</number>
<logs>
<log>Aggiunta la nuova stazione radio tematica "RDL Revival 70-80-90"</log>
<log>Migliorata la visualizzazione del selettore radio della pagina home</log>
<log>Implementato nel player la visualizzazione della pagina statica per le radio tematiche</log>
<log>Aggiunta la nuova stazione radio tematica "RDL Revival 70-80-90".</log>
<log>Migliorata la visualizzazione del selettore radio della pagina home.</log>
<log>Implementato nel player la visualizzazione della pagina statica per le radio tematiche.</log>
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
</logs>
</version>
@@ -136,10 +146,10 @@
<version>
<number>1.0.0 Stable</number>
<logs>
<log>Passaggio alla versione "Stable" dell'applicazione</log>
<log>Verifica di ulteriori correzioni dal passaggio della versione stabile</log>
<log>Leggerimento dell'applicazione a livello backend</log>
<log>Ulteriori analisi di stabilità dal momento del passaggio alla versione stabile</log>
<log>Passaggio alla versione "Stable" dell'applicazione.</log>
<log>Verifica di ulteriori correzioni dal passaggio della versione stabile.</log>
<log>Leggerimento dell'applicazione a livello backend.</log>
<log>Ulteriori analisi di stabilità dal momento del passaggio alla versione stabile.</log>
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
</logs>
</version>
@@ -176,7 +186,7 @@
<version>
<number>0.23.1 Beta</number>
<logs>
<log>Rimozione del logo al caricamento di ogni singola pagina (tranne all'avvio dell'app)</log>
<log>Rimozione del logo al caricamento di ogni singola pagina (tranne all'avvio dell'app).</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -184,8 +194,8 @@
<version>
<number>0.23.0 Beta</number>
<logs>
<log>Rilasciato il nuovo player video</log>
<log>Inserimento dell'emittente RC105TV nella lista delle WebTV</log>
<log>Rilasciato il nuovo player video.</log>
<log>Inserimento dell'emittente RC105TV nella lista delle WebTV.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -193,9 +203,9 @@
<version>
<number>0.22.4 Beta</number>
<logs>
<log>Correzione errori minimi nel sistema</log>
<log>Aggiunta indicatore della versione app nella schermata desktop</log>
<log>Preparazione player video - Correzioni minimi player e aggiunta di pagine mancanti</log>
<log>Correzione errori minimi nel sistema.</log>
<log>Aggiunta indicatore della versione app nella schermata desktop.</log>
<log>Preparazione player video - Correzioni minimi player e aggiunta di pagine mancanti.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -203,8 +213,8 @@
<version>
<number>0.22.3 Beta</number>
<logs>
<log>Migliorati i tempi di caricamento dei player</log>
<log>Aggiunta nuovi file di Configurazione</log>
<log>Migliorati i tempi di caricamento dei player.</log>
<log>Aggiunta nuovi file di Configurazione.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
@@ -222,8 +232,8 @@
<version>
<number>0.22.1 Beta</number>
<logs>
<log>Corretto il bug del logo all'interno dell'homepage</log>
<log>Corretto la riproduzione audio dell'emittente Radio Città 105</log>
<log>Corretto il bug del logo all'interno dell'homepage.</log>
<log>Corretto la riproduzione audio dell'emittente Radio Città 105.</log>
<log>Correzione e bugfix di problematiche varie.</log>
</logs>
</version>
+1 -1
View File
@@ -8,7 +8,7 @@
<slogan>O Sei Fuori, O Sei Dei Nostri</slogan>
<thematic>false</thematic>
<logo>https://i0.wp.com/www.radiodiffusionelibera.com/wp-content/uploads/2017/01/RDL-Facebook.png</logo>
<stream>https://asvradiostream.asvstudios.it/radio/8000/radio.mp3</stream>
<stream>https://asvradiostream.asvstudios.it/radio/8000/radio.aac</stream>
<streamhls>https://srvone.radio.asvhosting.com/hls/rdlradio/live.m3u8</streamhls>
<contentplayer>https://www.radiodiffusionelibera.com/contentrpigplay</contentplayer>
</station>
+74 -8
View File
@@ -340,12 +340,14 @@ document.addEventListener('DOMContentLoaded', function () {
*/
function initializePlayer() {
console.log('Inizializzazione player audio (v2.0 - Hybrid Strategy)...');
console.log('Inizializzazione player audio (v2.1 - Format Toggle)...');
const playPauseBtn = document.getElementById('playPauseBtn');
const playIcon = document.querySelector('.play-icon');
const pauseIcon = document.querySelector('.pause-icon');
const playerStatus = document.getElementById('playerStatus');
const formatToggleBtn = document.getElementById('formatToggleBtn');
const formatLabel = document.getElementById('formatLabel');
if (!playPauseBtn) return;
@@ -360,8 +362,19 @@ document.addEventListener('DOMContentLoaded', function () {
const streamFallback = playPauseBtn.getAttribute('data-stream-fallback');
const stationName = playPauseBtn.getAttribute('data-station-name');
// Stato formato audio (preferenza salvata in localStorage)
const storageKey = 'audioFormat_' + stationName;
let currentFormat = localStorage.getItem(storageKey) || 'hls'; // 'hls' o 'direct'
let isPlaying = false;
// Aggiorna label del formato
function updateFormatLabel() {
if (formatLabel) {
formatLabel.textContent = currentFormat === 'hls' ? 'HLS' : 'MP3';
}
}
updateFormatLabel();
// Configurazione HLS.js Ottimizzata per Qualità
const hlsConfig = {
debug: false,
@@ -379,7 +392,16 @@ document.addEventListener('DOMContentLoaded', function () {
* Logica di Selezione Player
* Priorità: HLS.js (PC/Android) > Nativo (iOS) > Fallback (Direct Stream)
*/
function initStream() {
function initStream(forceFormat = null) {
const preferredFormat = forceFormat || currentFormat;
// Se l'utente ha scelto formato diretto, usa subito MP3/AAC
if (preferredFormat === 'direct') {
console.log('User preference: Direct stream (MP3/AAC)');
useDirectStream();
return;
}
// STRATEGIA 1: HLS.js (Preferita per PC e Android)
if (Hls.isSupported()) {
console.log('Strategy: HLS.js (High Quality Control)');
@@ -427,7 +449,7 @@ document.addEventListener('DOMContentLoaded', function () {
hlsInstance.recoverMediaError();
break;
default:
fallbackToDirectStream();
useDirectStream();
break;
}
}
@@ -449,18 +471,54 @@ document.addEventListener('DOMContentLoaded', function () {
// STRATEGIA 3: Fallback (Stream MP3 diretto)
console.log('Strategy: Direct Fallback');
fallbackToDirectStream();
useDirectStream();
}
function fallbackToDirectStream() {
function useDirectStream() {
if (hlsInstance) {
hlsInstance.destroy();
hlsInstance = null;
}
console.log('Using direct stream:', streamFallback);
audioPlayer.src = streamFallback;
attemptPlay();
}
// Funzione per cambiare formato
function toggleFormat() {
const wasPlaying = !audioPlayer.paused;
// Cambia formato
currentFormat = currentFormat === 'hls' ? 'direct' : 'hls';
localStorage.setItem(storageKey, currentFormat);
console.log('Switching to format:', currentFormat);
// Aggiorna label
updateFormatLabel();
// Ferma riproduzione corrente
if (audioPlayer) {
audioPlayer.pause();
}
// Pulisci player precedente
if (hlsInstance) {
hlsInstance.destroy();
hlsInstance = null;
}
audioPlayer.src = '';
// Reinizializza con nuovo formato
initStream(currentFormat);
// Riprendi riproduzione se era in corso
if (wasPlaying) {
setTimeout(() => {
togglePlay();
}, 100);
}
}
function attemptPlay() {
// Nota: chiamare .play() senza interazione utente fallirà.
// Questa funzione prepara lo stato. Il vero play avviene al click.
@@ -519,10 +577,18 @@ document.addEventListener('DOMContentLoaded', function () {
updateUI(false);
};
// Format toggle button listener
if (formatToggleBtn) {
formatToggleBtn.onclick = (e) => {
e.preventDefault();
toggleFormat();
};
}
// Setup Media Session
setupMediaSession(stationName, playPauseBtn.getAttribute('data-station-slogan'), playPauseBtn.getAttribute('data-station-logo'), playIcon, pauseIcon);
console.log('Player System Ready.');
console.log('Player System Ready with format toggle.');
}
/**
@@ -705,7 +771,7 @@ document.addEventListener('DOMContentLoaded', function () {
* Setup modalità standalone (PWA)
*/
function setupStandaloneMode() {
const appContainer = document.querySelector('.container');
const appContainer = document.querySelector('.container') || document.querySelector('.container-fluid');
if (!appContainer) return;
if (window.opener && !window.opener.closed) {
@@ -748,7 +814,7 @@ document.addEventListener('DOMContentLoaded', function () {
setupOpenAppButton();
if (document.querySelector('.container')) {
if (document.querySelector('.container') || document.querySelector('.container-fluid')) {
setupStandaloneMode();
attachLinkListeners();
setupHistoryNavigation();
+7
View File
@@ -0,0 +1,7 @@
/*!
* Bootstrap v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;s<o;s++){const o=t[n[s]];if(o.originalHandler===e&&o.delegationSelector===i)return o}return null}function S(t,e,i){const n="string"==typeof e,s=n?i:e;let o=P(t);return k.has(o)||(o=t),[n,s,o]}function N(t,e,i,n,s){if("string"!=typeof e||!t)return;if(i||(i=n,n=null),C.test(e)){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!Line truncated
//# sourceMappingURL=bootstrap.bundle.min.js.map
+1 -1
View File
@@ -15,7 +15,7 @@
</div>
</div>
<main class="container" id="content">
<main class="container-fluid" id="content">
<?php
// Carica il contenuto iniziale in base all'URL
switch ($page) {
+6 -1
View File
@@ -41,7 +41,7 @@
}
?>
<div class="footer_player" <?php if($is_mobile){ ?> style="bottom: 84px;" <? } ?>>
<div class="footer_player" <?php if($is_mobile){ echo "style=\"bottom: 84px;\""; } ?>>
<div class="row align-items-center">
<div class="col-2" style="width: 70px;">
<img src="<?php echo $station->logo; ?>" alt="<?php echo $station->name; ?>" style="width: 60px;">
@@ -50,6 +50,11 @@
<div id="artist" style="font-weight: 700; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;"><?php echo $station->name; ?></div>
<div id="playerStatus" style="text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical ;overflow: hidden;"><?php echo $station->slogan; ?></div>
</div>
<div class="col-auto" style="text-align: center; margin-top: 1px; padding-right: 0;">
<button id="formatToggleBtn" title="Cambia formato audio">
<span id="formatLabel" style="font-size: 12px;font-weight: 600;border-radius: 6px;border: 2px solid #ffffff;padding: 4px 6px;background: rgba(247, 184, 53, 0.3);color: #2a377e;">HLS</span>
</button>
</div>
<div class="col-2" style="text-align: center; margin-top: 1px; margin-right: 5px; width: 67px;">
<button id="playPauseBtn" data-stream-hls="<?php echo $station->streamhls; ?>" data-stream-fallback="<?php echo $station->stream; ?>" data-station-name="<?php echo htmlspecialchars($station->name); ?>" data-station-logo="<?php echo $station->logo; ?>" data-station-slogan="<?php echo htmlspecialchars($station->slogan); ?>">
<i class="material-icons play-icon" id="play-pause" style="font-size: 35px; border-radius: 10px; border: 2px solid #ffffff; padding: 4px 5px 4px 4px; margin-top: -2px; background: #f7b835; color: #2a377e;">play_arrow</i>
+1 -1
View File
@@ -39,7 +39,7 @@ header('Referrer-Policy: strict-origin-when-cross-origin');
<link rel="stylesheet" href="<?=$base_path?>/css/style.css?v=<?=$version_app?>">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="<?=$base_path?>/css/animation.css?v=<?=$version_app?>">
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
<!-- <script src="https://code.jquery.com/jquery-2.2.4.js"></script> -->
<script src="<?=$base_path?>/js/bootstrap.js"></script>
<script>
// Passa il percorso base a JavaScript