Sindbad~EG File Manager
<footer class="motionflow-footer py-5">
<div class="container">
<div class="collab-section d-none">
<div class="collab-box" data-aos="fade-up" data-aos-duration="1000">
<!--div class="row justify-content-between align-items-center flex-wrap-reverse">
<div class="col-lg-6 mb-4">
<div class=" p-5">
<h2 class="collab-title">Ready to Create?</h2>
<p class="collab-subtitle">
Let's turn your ideas into stunning visual realities. Reach out today and begin your motion journey!
</p>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="contact-box d-flex align-items-center justify-content-center p-4">
<a href="#" class="btn btn-gradient">Get a Quote</a>
</div>
</div>
</div-->
<div class="mixcloud-embed-wrapper">
<?php
$domain = $_SERVER['HTTP_HOST'];
?>
<iframe
src="https://player.twitch.tv/?channel=jamonculture&parent=<?= $domain ?>"
height="100lx"
width="100%"
frameborder="0"
allowfullscreen="true"
scrolling="no">
</iframe> </div>
</div>
</div>
<div class="row align-items-start justify-content-between my-4">
<!-- Left Column -->
<!--div class="col-md-4 text-center text-md-start mb-3" data-aos="fade-right" data-aos-delay="100">
<h5 class="footer-title">Programme</h5>
<ul class="list-unstyled">
<li>Sendungen</li>
<li>Musik | Radio</li>
<li>Video | Multimedia</li>
<li>Events</li>
<li>Mitmachen</li>
</ul>
</div-->
<!-- Center Column -->
<div class="col-md-4 text-center mb-3 text-md-start" data-aos="fade-up" data-aos-delay="200">
<div class="rounded rounder-2 w-100">
<a class="text-center p-3 w-50 d-inline-block" href="#">
<img src="img/logo1.png" class="w-100" alt="Jam On Logo">
</a>
</div>
<p class="footer-desc">Jam On bridges culture, music, and community through creative expression and collaboration.</p>
<div class="social-icons d-flex justify-content-center gap-3 mt-5">
<a href="https://www.mixcloud.com/JamOnRadio/" target="_blank" class="social-icon-btn"><i class="fab fa-mixcloud"></i></a>
<a href="https://www.instagram.com/jamonradio/" target="_blank" class="social-icon-btn"><i class="fab fa-instagram"></i></a>
<a href="https://www.youtube.com/@jamonradio/" target="_blank" class="social-icon-btn"><i class="fab fa-youtube"></i></a>
<a href="https://www.tiktok.com/@jamon.culture" target="_blank" class="social-icon-btn"><i class="fab fa-tiktok"></i></a>
<a href="https://www.facebook.com/JamOnRadioOfficial/" target="_blank" class="social-icon-btn"><i class="fab fa-facebook-f"></i></a>
<a href="https://www.twitch.tv/jamonradio" target="_blank" class="social-icon-btn"><i class="fab fa-twitch"></i></a>
</div>
</div>
<!-- Right Column -->
<div class="col-md-4 mb-3 text-center text-md-end ms-auto" data-aos="fade-left" data-aos-delay="300">
<h5 class="footer-title">Verein Jam On</h5>
<ul class="list-unstyled">
<li><a href="#">Über Uns</a></li>
<li><a href="#">Team</a></li>
<li><a href="#">Mitgliedschaft</a></li>
<li><a href="#">Partnerschaften & Unterstützung</a></li>
<li><a href="#">Unser Zuhause @i45</a></li>
</ul>
</div>
</div>
</div>
<!-- Footer under Footer (Legal Links) -->
<div class="footer-bottom py-3 border-top">
<div class="container d-flex flex-column flex-md-row justify-content-between text-center text-md-start">
<p class="mb-2 mb-md-0">© 2025 Jam On. All rights reserved.</p>
<ul class="list-inline mb-0">
<li class="list-inline-item"><a href="#">Impressum</a></li>
<li class="list-inline-item"><a href="#">Ombudsstelle</a></li>
</ul>
</div>
</div>
</footer>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script>
$(document).ready(function(){
// Initialize Owl Carousel for Features section
$(".motion-features .owl-carousel").owlCarousel({
loop: true,
margin: 20,
nav: true,
autoplay: true,
autoplayTimeout: 3000,
autoplayHoverPause: true,
responsive: {
0: { items: 1 },
768: { items: 2 },
992: { items: 3 }
}
});
// Initialize Owl Carousel for Trending section
$(".trending-section .owl-carousel").owlCarousel({
loop: true,
margin: 20,
nav: true,
autoplay: true,
autoplayTimeout: 2000,
autoplayHoverPause: true,
responsive: {
0: { items: 1 },
576: { items: 2 },
768: { items: 3 },
992: { items: 4 }
}
});
// Initialize AOS
AOS.init({
once: true, // Whether animation should happen only once - default
mirror: false, // Whether elements should animate out of view - default
duration: 1000, // Values from 0 to 3000, with step 50ms
easing: 'ease-out-back', // default easing for AOS animations
});
// Sticky live player on scroll
var livePlayer = $('#livePlayer');
// Ensure the initial offset is correct after page load
var originalOffset = livePlayer.offset().top;
$(window).scroll(function() {
if ($(window).scrollTop() > originalOffset) {
livePlayer.addClass('sticky-top');
} else {
livePlayer.removeClass('sticky-top');
}
});
});
</script>
<script>
const audio = document.getElementById("liveAudio");
const soundWaves = document.querySelector(".sound-waves");
window.addEventListener("DOMContentLoaded", () => {
// Attempt to play and unmute. Autoplay policies might restrict this until user interaction.
// User interaction is generally required to unmute or autoplay audio without muting.
audio.play().catch(error => {
console.log("Autoplay blocked:", error);
// You might want to show a play button here if autoplay is blocked
});
audio.muted = false; // Try to unmute after user interaction if browser allows
});
// Start/stop wave animation based on audio playback state
audio.addEventListener("play", () => {
soundWaves.classList.add("playing");
});
audio.addEventListener("pause", () => {
soundWaves.classList.remove("playing");
});
audio.addEventListener("ended", () => {
soundWaves.classList.remove("playing");
});
// Fetch track info every 20 seconds
async function fetchLiveTrack() {
try {
const res = await fetch('https://www.jam-on.ch/tracklist/currentlyplaying.json');
const data = await res.json();
// Ensure elements exist before trying to update them
const trackTitleElement = document.getElementById("trackTitle");
const trackArtistElement = document.getElementById("trackArtist");
const trackImageElement = document.getElementById("trackImage");
if (trackTitleElement) trackTitleElement.textContent = data.track || "Unknown Track";
if (trackArtistElement) trackArtistElement.textContent = data.artist || "Unknown Artist";
if (trackImageElement) trackImageElement.src = data.cover || "https://www.jam-on.ch/tracklist/art-00.jpg";
} catch (error) {
console.error("Error fetching live track info:", error);
const trackTitleElement = document.getElementById("trackTitle");
const trackArtistElement = document.getElementById("trackArtist");
if (trackTitleElement) trackTitleElement.textContent = "Unable to load";
if (trackArtistElement) trackArtistElement.textContent = "";
}
}
// Initial fetch and set interval
fetchLiveTrack();
setInterval(fetchLiveTrack, 20000);
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const audio = document.getElementById('liveAudio');
const playPauseBtn = document.getElementById('playPauseBtn');
const muteBtn = document.getElementById('muteBtn');
const volumeSlider = document.getElementById('volumeSlider');
const currentTimeDisplay = document.getElementById('currentTime');
const timeBar = document.getElementById('timeBar');
let playStartTime = null;
// PLAY / PAUSE
playPauseBtn.addEventListener('click', () => {
if (audio.paused) {
audio.play();
playPauseBtn.innerHTML = '<i class="fas fa-pause"></i>';
if (!playStartTime) playStartTime = Date.now();
} else {
audio.pause();
playPauseBtn.innerHTML = '<i class="fas fa-play"></i>';
}
});
// MUTE / UNMUTE
muteBtn.addEventListener('click', () => {
audio.muted = !audio.muted;
muteBtn.innerHTML = audio.muted
? '<i class="fas fa-volume-mute"></i>'
: '<i class="fas fa-volume-up"></i>';
});
// Volume Control
volumeSlider.addEventListener('input', () => {
audio.volume = volumeSlider.value;
});
// Timer & Progress
setInterval(() => {
if (!audio.paused) {
const elapsed = Math.floor((Date.now() - (playStartTime || Date.now())) / 1000);
const mins = String(Math.floor(elapsed / 60)).padStart(2, '0');
const secs = String(elapsed % 60).padStart(2, '0');
currentTimeDisplay.textContent = `${mins}:${secs}`;
timeBar.value = (elapsed % 100);
}
}, 1000);
});
</script>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists