generated from FriendsOfREDAXO/rex_repo_template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
169 additions
and
181 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,199 +1,187 @@ | ||
document.addEventListener('DOMContentLoaded', function() { | ||
// Prüfen, ob mindestens ein .video-container Element existiert | ||
if (document.querySelector('.video-container')) { | ||
const translations = { | ||
de: { | ||
'Seek forward {amount} seconds': '{amount} Sekunden vorwärts springen', | ||
'Seek backward {amount} seconds': '{amount} Sekunden rückwärts springen', | ||
'Seek to live': 'Zur Live-Übertragung springen', | ||
'Caption Styles': 'Untertitelstile', | ||
'Captions look like this': 'Untertitel sehen so aus', | ||
'Closed-Captions Off': 'Untertitel aus', | ||
'Closed-Captions On': 'Untertitel an', | ||
'Display Background': 'Hintergrund anzeigen', | ||
'Enter Fullscreen': 'Vollbild', | ||
'Enter PiP': 'Bild-in-Bild aktivieren', | ||
'Exit Fullscreen': 'Vollbild beenden', | ||
'Exit PiP': 'Bild-in-Bild beenden', | ||
'Google Cast': 'Google Cast', | ||
'Keyboard Animations': 'Tastatur-Animationen', | ||
'Seek Backward': 'Zurückspulen', | ||
'Seek Forward': 'Vorspulen', | ||
'Skip To Live': 'Zur Live-Übertragung springen', | ||
'Text Background': 'Texthintergrund', | ||
'Accessibility': 'Barrierefreiheit', | ||
'AirPlay': 'AirPlay', | ||
'Announcements': 'Ankündigungen', | ||
'Audio': 'Audio', | ||
'Auto': 'Auto', | ||
'Boost': 'Verstärken', | ||
'Captions': 'Untertitel', | ||
'Chapters': 'Kapitel', | ||
'Color': 'Farbe', | ||
'Connected': 'Verbunden', | ||
'Connecting': 'Verbindung wird hergestellt', | ||
'Continue': 'Fortsetzen', | ||
'Default': 'Standard', | ||
'Disabled': 'Deaktiviert', | ||
'Disconnected': 'Getrennt', | ||
'Download': 'Herunterladen', | ||
'Family': 'Familie', | ||
'Font': 'Schriftart', | ||
'Fullscreen': 'Vollbild', | ||
'LIVE': 'LIVE', | ||
'Loop': 'Wiederholen', | ||
'Mute': 'Stummschalten', | ||
'Normal': 'Normal', | ||
'Off': 'Aus', | ||
'Opacity': 'Deckkraft', | ||
'Pause': 'Pause', | ||
'PiP': 'Bild-in-Bild', | ||
'Play': 'Abspielen', | ||
'Playback': 'Wiedergabe', | ||
'Quality': 'Qualität', | ||
'Replay': 'Wiederholen', | ||
'Reset': 'Zurücksetzen', | ||
'Seek': 'Suchen', | ||
'Settings': 'Einstellungen', | ||
'Shadow': 'Schatten', | ||
'Size': 'Größe', | ||
'Speed': 'Geschwindigkeit', | ||
'Text': 'Text', | ||
'Track': 'Spur', | ||
'Unmute': 'Ton einschalten', | ||
'Volume': 'Lautstärke', | ||
}, | ||
en: { | ||
'Seek forward {amount} seconds': 'Seek forward {amount} seconds', | ||
'Seek backward {amount} seconds': 'Seek backward {amount} seconds', | ||
'Seek to live': 'Seek to live', | ||
'Caption Styles': 'Caption Styles', | ||
'Captions look like this': 'Captions look like this', | ||
'Closed-Captions Off': 'Closed-Captions Off', | ||
'Closed-Captions On': 'Closed-Captions On', | ||
'Display Background': 'Display Background', | ||
'Enter Fullscreen': 'Enter Fullscreen', | ||
'Enter PiP': 'Enter PiP', | ||
'Exit Fullscreen': 'Exit Fullscreen', | ||
'Exit PiP': 'Exit PiP', | ||
'Google Cast': 'Google Cast', | ||
'Keyboard Animations': 'Keyboard Animations', | ||
'Seek Backward': 'Seek Backward', | ||
'Seek Forward': 'Seek Forward', | ||
'Skip To Live': 'Skip To Live', | ||
'Text Background': 'Text Background', | ||
'Accessibility': 'Accessibility', | ||
'AirPlay': 'AirPlay', | ||
'Announcements': 'Announcements', | ||
'Audio': 'Audio', | ||
'Auto': 'Auto', | ||
'Boost': 'Boost', | ||
'Captions': 'Captions', | ||
'Chapters': 'Chapters', | ||
'Color': 'Color', | ||
'Connected': 'Connected', | ||
'Connecting': 'Connecting', | ||
'Continue': 'Continue', | ||
'Default': 'Default', | ||
'Disabled': 'Disabled', | ||
'Disconnected': 'Disconnected', | ||
'Download': 'Download', | ||
'Family': 'Family', | ||
'Font': 'Font', | ||
'Fullscreen': 'Fullscreen', | ||
'LIVE': 'LIVE', | ||
'Loop': 'Loop', | ||
'Mute': 'Mute', | ||
'Normal': 'Normal', | ||
'Off': 'Off', | ||
'Opacity': 'Opacity', | ||
'Pause': 'Pause', | ||
'PiP': 'PiP', | ||
'Play': 'Play', | ||
'Playback': 'Playback', | ||
'Quality': 'Quality', | ||
'Replay': 'Replay', | ||
'Reset': 'Reset', | ||
'Seek': 'Seek', | ||
'Settings': 'Settings', | ||
'Shadow': 'Shadow', | ||
'Size': 'Size', | ||
'Speed': 'Speed', | ||
'Text': 'Text', | ||
'Track': 'Track', | ||
'Unmute': 'Unmute', | ||
'Volume': 'Volume', | ||
} | ||
}; | ||
const consentKey = 'video_consent'; | ||
let videoConsent = JSON.parse(localStorage.getItem(consentKey) || '{}'); | ||
|
||
function getPlayerLanguage(player) { | ||
return player.getAttribute('lang') || 'en'; | ||
const translations = { | ||
de: { | ||
'Load Video': 'Video laden', | ||
'Consent given': 'Zustimmung erteilt', | ||
'Click here to load and play the video.': 'Klicken Sie hier, um das Video zu laden und abzuspielen.', | ||
'Video from': 'Video von', | ||
'Video description': 'Videobeschreibung', | ||
'Alternative view': 'Alternative Ansicht', | ||
'Open alternative view': 'Alternative Ansicht öffnen', | ||
'Additional information': 'Zusätzliche Informationen', | ||
'Video player': 'Videoplayer', | ||
'Seek forward {amount} seconds': '{amount} Sekunden vorwärts springen', | ||
'Seek backward {amount} seconds': '{amount} Sekunden rückwärts springen', | ||
'Seek to live': 'Zur Live-Übertragung springen', | ||
'Caption Styles': 'Untertitelstile', | ||
'Captions look like this': 'Untertitel sehen so aus', | ||
'Closed-Captions Off': 'Untertitel aus', | ||
'Closed-Captions On': 'Untertitel an', | ||
'Enter Fullscreen': 'Vollbild', | ||
'Exit Fullscreen': 'Vollbild beenden', | ||
'Enter PiP': 'Bild-in-Bild aktivieren', | ||
'Exit PiP': 'Bild-in-Bild beenden', | ||
'Seek Backward': 'Zurückspulen', | ||
'Seek Forward': 'Vorspulen', | ||
'Mute': 'Stummschalten', | ||
'Unmute': 'Ton einschalten', | ||
'Play': 'Abspielen', | ||
'Pause': 'Pause', | ||
'Settings': 'Einstellungen' | ||
}, | ||
en: { | ||
'Load Video': 'Load Video', | ||
'Consent given': 'Consent given', | ||
'Click here to load and play the video.': 'Click here to load and play the video.', | ||
'Video from': 'Video from', | ||
'Video description': 'Video description', | ||
'Alternative view': 'Alternative view', | ||
'Open alternative view': 'Open alternative view', | ||
'Additional information': 'Additional information', | ||
'Video player': 'Video player', | ||
'Seek forward {amount} seconds': 'Seek forward {amount} seconds', | ||
'Seek backward {amount} seconds': 'Seek backward {amount} seconds', | ||
'Seek to live': 'Seek to live', | ||
'Caption Styles': 'Caption Styles', | ||
'Captions look like this': 'Captions look like this', | ||
'Closed-Captions Off': 'Closed-Captions Off', | ||
'Closed-Captions On': 'Closed-Captions On', | ||
'Enter Fullscreen': 'Enter Fullscreen', | ||
'Exit Fullscreen': 'Exit Fullscreen', | ||
'Enter PiP': 'Enter PiP', | ||
'Exit PiP': 'Exit PiP', | ||
'Seek Backward': 'Seek Backward', | ||
'Seek Forward': 'Seek Forward', | ||
'Mute': 'Mute', | ||
'Unmute': 'Unmute', | ||
'Play': 'Play', | ||
'Pause': 'Pause', | ||
'Settings': 'Settings' | ||
} | ||
}; | ||
|
||
function applyTranslations(player) { | ||
const videoLayout = player.querySelector('media-video-layout'); | ||
if (videoLayout) { | ||
const lang = getPlayerLanguage(player); | ||
videoLayout.translations = translations[lang] || translations['en']; | ||
} | ||
} | ||
function getText(key, lang = 'en') { | ||
return translations[lang][key] || key; | ||
} | ||
|
||
function loadVideo(originalPlayer, placeholderId) { | ||
const placeholder = document.getElementById(placeholderId); | ||
const wrapper = placeholder.parentElement; | ||
|
||
const mediaPlayer = originalPlayer.cloneNode(true); | ||
|
||
mediaPlayer.setAttribute('src', mediaPlayer.getAttribute('data-consent-source')); | ||
|
||
mediaPlayer.removeAttribute('data-consent-source'); | ||
mediaPlayer.removeAttribute('data-consent-text'); | ||
function setConsent(platform) { | ||
videoConsent[platform] = true; | ||
localStorage.setItem(consentKey, JSON.stringify(videoConsent)); | ||
document.cookie = `${platform}_consent=true; path=/; max-age=${30 * 24 * 60 * 60}; SameSite=Lax; Secure`; | ||
} | ||
|
||
wrapper.replaceChild(mediaPlayer, placeholder); | ||
function hasConsent(platform) { | ||
return videoConsent[platform] === true || document.cookie.includes(`${platform}_consent=true`); | ||
} | ||
|
||
applyTranslations(mediaPlayer); | ||
} | ||
function loadVideo(placeholder) { | ||
const platform = placeholder.dataset.platform; | ||
const videoId = placeholder.dataset.videoId; | ||
const mediaPlayer = placeholder.nextElementSibling; | ||
|
||
function createConsentPlaceholder(videoContainer, originalPlayer, consentText) { | ||
const wrapper = document.createElement('div'); | ||
wrapper.className = 'video-wrapper'; | ||
|
||
const placeholder = document.createElement('div'); | ||
placeholder.className = 'consent-placeholder'; | ||
const placeholderId = 'consent-placeholder-' + Math.random().toString(36).substr(2, 9); | ||
placeholder.id = placeholderId; | ||
if (mediaPlayer && mediaPlayer.tagName.toLowerCase() === 'media-player') { | ||
mediaPlayer.style.display = ''; | ||
mediaPlayer.setAttribute('src', `${platform}/${videoId}`); | ||
placeholder.style.display = 'none'; | ||
} else { | ||
console.error('Media player element not found'); | ||
} | ||
} | ||
|
||
const text = document.createElement('p'); | ||
text.textContent = consentText; | ||
function updatePlaceholder(placeholder, consented) { | ||
const button = placeholder.querySelector('.consent-button'); | ||
const lang = document.documentElement.lang || 'en'; | ||
|
||
if (consented) { | ||
button.textContent = getText('Consent given', lang); | ||
button.disabled = true; | ||
} else { | ||
button.textContent = getText('Load Video', lang); | ||
button.disabled = false; | ||
} | ||
} | ||
|
||
const button = document.createElement('button'); | ||
const lang = getPlayerLanguage(originalPlayer); | ||
button.textContent = lang === 'de' ? 'Video laden' : 'Load Video'; | ||
button.addEventListener('click', () => loadVideo(originalPlayer, placeholderId)); | ||
function initializePlaceholders() { | ||
document.querySelectorAll('.consent-placeholder').forEach(placeholder => { | ||
const platform = placeholder.dataset.platform; | ||
const consentButton = placeholder.querySelector('.consent-button'); | ||
const consented = hasConsent(platform); | ||
|
||
placeholder.appendChild(text); | ||
placeholder.appendChild(button); | ||
wrapper.appendChild(placeholder); | ||
updatePlaceholder(placeholder, consented); | ||
|
||
videoContainer.replaceChild(wrapper, originalPlayer); | ||
} | ||
if (consented) { | ||
loadVideo(placeholder); | ||
} else { | ||
consentButton.addEventListener('click', () => { | ||
setConsent(platform); | ||
updatePlaceholder(placeholder, true); | ||
loadVideo(placeholder); | ||
}); | ||
} | ||
}); | ||
} | ||
|
||
document.querySelectorAll('media-player').forEach(applyTranslations); | ||
|
||
document.querySelectorAll('media-player[data-consent-source]').forEach(player => { | ||
const videoContainer = player.closest('.video-container'); | ||
const consentSource = player.getAttribute('data-consent-source'); | ||
const lang = getPlayerLanguage(player); | ||
const defaultConsentText = lang === 'de' | ||
? 'Klicken Sie hier, um das Video zu laden und abzuspielen.' | ||
: 'Click here to load and play the video.'; | ||
const consentText = player.getAttribute('data-consent-text') || defaultConsentText; | ||
|
||
if (consentSource.startsWith('youtube/') || consentSource.startsWith('vimeo/')) { | ||
createConsentPlaceholder(videoContainer, player, consentText); | ||
function initializeMediaPlayers() { | ||
document.querySelectorAll('media-player[data-video-platform]').forEach(player => { | ||
const platform = player.dataset.videoPlatform; | ||
if (hasConsent(platform)) { | ||
const videoId = player.dataset.videoId; | ||
player.style.display = ''; | ||
player.setAttribute('src', `${platform}/${videoId}`); | ||
const placeholder = player.previousElementSibling; | ||
if (placeholder && placeholder.classList.contains('consent-placeholder')) { | ||
placeholder.style.display = 'none'; | ||
} | ||
} | ||
}); | ||
} | ||
|
||
document.documentElement.className = 'js'; | ||
function applyTranslations() { | ||
const videoLayouts = document.querySelectorAll('media-video-layout'); | ||
videoLayouts.forEach(layout => { | ||
const player = layout.closest('media-player'); | ||
const lang = player ? (player.getAttribute('lang') || 'en') : 'en'; | ||
layout.translations = translations[lang] || translations['en']; | ||
}); | ||
|
||
document.querySelectorAll('.consent-placeholder').forEach(placeholder => { | ||
const lang = document.documentElement.lang || 'en'; | ||
const button = placeholder.querySelector('.consent-button'); | ||
const text = placeholder.querySelector('p'); | ||
if (button) { | ||
button.textContent = getText('Load Video', lang); | ||
} | ||
if (text) { | ||
text.textContent = getText('Click here to load and play the video.', lang); | ||
} | ||
}); | ||
} | ||
|
||
initializePlaceholders(); | ||
initializeMediaPlayers(); | ||
applyTranslations(); | ||
|
||
// Beobachter für dynamisch hinzugefügte Elemente | ||
const observer = new MutationObserver((mutations) => { | ||
mutations.forEach((mutation) => { | ||
if (mutation.type === 'childList') { | ||
mutation.addedNodes.forEach((node) => { | ||
if (node.nodeType === Node.ELEMENT_NODE) { | ||
if (node.classList.contains('consent-placeholder')) { | ||
initializePlaceholders(); | ||
} | ||
if (node.tagName.toLowerCase() === 'media-player') { | ||
initializeMediaPlayers(); | ||
applyTranslations(); | ||
} | ||
} | ||
}); | ||
} | ||
}); | ||
}); | ||
|
||
observer.observe(document.body, { childList: true, subtree: true }); | ||
}); |