diff --git a/script.js b/script.js
deleted file mode 100644
index 8e9d501..0000000
--- a/script.js
+++ /dev/null
@@ -1,271 +0,0 @@
-// Public Domain
-
-document.addEventListener('DOMContentLoaded', function () {
- const presetContainer = document.getElementById('preset-container');
- const stopButton = document.querySelector('.stop-button');
- const currentStationName = document.getElementById('current-station-name');
- const presetModal = document.getElementById('preset-modal');
- const tableBody = document.querySelector('#sortable-tbody');
- const editPresetsButton = document.getElementById('edit-presets-button');
- const openSleepTimerModalButton = document.getElementById('open-sleep-timer-modal');
- const sleepTimerModal = document.getElementById('sleep-timer-modal');
- const closeSleepTimerModalButton = document.getElementById('close-sleep-timer-modal');
- const offSleepTimerModalButton = document.getElementById('off-sleep-timer-modal');
- let currentSound = null;
- let presets = [];
- let sleepTimerTimeout = null;
- let sleepTimerEndTime = null;
-
- initializeFooter();
- loadPresets();
- initializeEventListeners();
-
- function initializeFooter() {
- const currentYear = new Date().getFullYear();
- document.getElementById('current-year').textContent = currentYear;
- document.getElementById('server-name').textContent = window.location.hostname;
- }
-
- function updateTitle(stationName) {
- document.title = stationName ? `${stationName} - Radioplayer mit Presets` : "Radioplayer mit Presets";
- }
-
- function initializeEventListeners() {
- stopButton.addEventListener('click', stopPlayback);
- editPresetsButton.addEventListener('click', openModal);
- }
-
- async function loadPresets() {
- presets = JSON.parse(localStorage.getItem('presets')) || [];
- if (presets.length === 0) {
- try {
- const response = await fetch('webradio_presets.json');
- if (!response.ok) throw new Error('Datei konnte nicht geladen werden');
- presets = await response.json();
- localStorage.setItem('presets', JSON.stringify(presets));
- } catch (error) {
- alert('Fehler beim Laden der Presets: ' + error.message);
- }
- }
- displayPresets(presets);
- renderPresets();
- initSortable();
- }
-
- function displayPresets(presets) {
- presetContainer.innerHTML = '';
- presets.forEach(preset => addNewPreset(preset.name, preset.url));
- }
-
- function addNewPreset(name, url) {
- const presetItem = document.createElement('div');
- presetItem.classList.add('preset-item');
- presetItem.dataset.streamUrl = url;
- presetItem.innerHTML = `
${name}
`;
- presetItem.addEventListener('click', () => playStream(url, presetItem));
- presetContainer.appendChild(presetItem);
- }
-
- function renderPresets() {
- tableBody.innerHTML = '';
- presets.forEach((preset, index) => {
- const row = document.createElement('tr');
- row.setAttribute('data-index', index);
- row.innerHTML = `
- ☰ |
- |
- |
- |
- `;
- tableBody.appendChild(row);
- });
- }
-
- openSleepTimerModalButton.addEventListener('click', function () {
- sleepTimerModal.classList.remove('hidden');
- sleepTimerModal.style.display = 'block';
- updateOffButtonVisibility();
- });
-
- closeSleepTimerModalButton.addEventListener('click', function () {
- sleepTimerModal.classList.add('hidden');
- sleepTimerModal.style.display = 'none';
- });
-
- offSleepTimerModalButton.addEventListener('click', function () {
- clearSleepTimer();
- sleepTimerModal.classList.add('hidden');
- sleepTimerModal.style.display = 'none';
- });
-
- document.querySelectorAll('.time-option').forEach(button => {
- button.addEventListener('click', function () {
- const timeInMilliseconds = button.getAttribute('data-time');
- startSleepTimer(parseInt(timeInMilliseconds));
- sleepTimerModal.classList.add('hidden');
- sleepTimerModal.style.display = 'none';
- });
- });
-
- function startSleepTimer(duration) {
- if (sleepTimerTimeout) {
- clearTimeout(sleepTimerTimeout);
- }
- sleepTimerEndTime = Date.now() + duration;
- sleepTimerTimeout = setTimeout(() => {
- stopPlayback();
- updateSleepTimerButton();
- updateOffButtonVisibility();
- }, duration);
- updateSleepTimerButton();
- updateOffButtonVisibility();
- }
-
- function clearSleepTimer() {
- if (sleepTimerTimeout) {
- clearTimeout(sleepTimerTimeout);
- sleepTimerTimeout = null;
- sleepTimerEndTime = null;
- openSleepTimerModalButton.textContent = 'Sleep Timer';
- updateOffButtonVisibility();
- }
- }
-
- function updateSleepTimerButton() {
- if (sleepTimerEndTime) {
- const remainingTime = Math.max(0, Math.ceil((sleepTimerEndTime - Date.now()) / 60000));
- openSleepTimerModalButton.innerHTML = ` ${remainingTime} Minuten`;
- if (remainingTime > 0) {
- setTimeout(updateSleepTimerButton, 60000); // Update every minute
- } else {
- openSleepTimerModalButton.textContent = 'Sleep Timer';
- sleepTimerEndTime = null;
- updateOffButtonVisibility();
- }
- }
- }
-
- function updateOffButtonVisibility() {
- if (sleepTimerTimeout) {
- offSleepTimerModalButton.style.display = 'inline-block';
- } else {
- offSleepTimerModalButton.style.display = 'none';
- }
- }
-
- function playStream(url, item) {
- stopPlayback();
- currentSound = new Howl({
- src: [url],
- html5: true,
- volume: 0.5,
- onplay: () => {
- stopButton.classList.remove('hidden');
- updateTitle(item.querySelector('h3').textContent);
- currentStationName.textContent = 'Es läuft: ' + item.querySelector('h3').textContent;
- },
- onstop: () => {
- stopButton.classList.add('hidden');
- currentStationName.textContent = 'Wähle einen Sender aus';
- updateTitle('');
- }
- });
- currentSound.play();
- }
-
- function stopPlayback() {
- if (currentSound) {
- currentSound.stop();
- currentSound = null;
- }
- }
-
- function openModal() {
- presetModal.classList.remove('hidden');
- presetModal.style.display = 'block';
- renderPresets();
- }
-
- window.closeModal = function() {
- presetModal.classList.add('hidden');
- presetModal.style.display = 'none';
- }
-
- window.addPreset = function() {
- presets.push({ name: 'Neuer Sender', url: '' });
- renderPresets();
- }
-
- window.changeName = function(index, newName) {
- presets[index].name = newName;
- }
-
- window.changeURL = function(index, newURL) {
- presets[index].url = newURL;
- }
-
- window.deletePreset = function(index) {
- presets.splice(index, 1);
- renderPresets();
- }
-
- window.saveAndClose = function() {
- savePresets();
- closeModal();
- location.reload();
- }
-
- function savePresets() {
- localStorage.setItem('presets', JSON.stringify(presets));
- }
-
- function initSortable() {
- const sortable = new Sortable(tableBody, {
- handle: '.drag-handle',
- animation: 150,
- onEnd: function (evt) {
- const newOrder = Array.from(tableBody.children).map(row => parseInt(row.getAttribute('data-index')));
- presets = newOrder.map(index => presets[index]);
- }
- });
- }
-
- window.exportPreset = function() {
- const presetsJSON = JSON.stringify(presets, null, 2);
- const blob = new Blob([presetsJSON], { type: 'application/json' });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = 'radio_presets.json';
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- URL.revokeObjectURL(url);
- }
-
- window.importPreset = function() {
- const input = document.createElement('input');
- input.type = 'file';
- input.accept = 'application/json';
- input.onchange = function(event) {
- const file = event.target.files[0];
- if (file) {
- const reader = new FileReader();
- reader.onload = function(e) {
- try {
- const importedPresets = JSON.parse(e.target.result);
- presets = importedPresets;
- localStorage.setItem('presets', JSON.stringify(presets));
- renderPresets();
- displayPresets(presets);
- location.reload();
- } catch (error) {
- alert('Fehler beim Importieren der Presets: Ungültige Datei.');
- }
- };
- reader.readAsText(file);
- }
- };
- input.click();
- }
-});