119 lines
3.3 KiB
Twig
119 lines
3.3 KiB
Twig
<div class="timed-download" data-timed-download>
|
|
{% if timedDownloadText %}
|
|
<div class="timed-download__text">
|
|
{{ timedDownloadText|raw }}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if isValid %}
|
|
<p class="timed-download__countdown" data-expires-at="{{ expiresAt }}">
|
|
Verbleibende Zeit: --:--:--
|
|
</p>
|
|
|
|
<p class="timed-download__valid-until">
|
|
Gueltig bis:
|
|
<time datetime="{{ expiresAt|date('c') }}">{{ expiresAt|date('d.m.Y H:i') }} Uhr</time>
|
|
</p>
|
|
|
|
<p class="timed-download__link">
|
|
<a href="{{ downloadUrl }}">Download starten</a>
|
|
</p>
|
|
|
|
<p class="timed-download__share-link">
|
|
<a href="{{ shareUrl|default('#') }}">Diesen Link speichern</a>
|
|
</p>
|
|
|
|
<script>
|
|
(function () {
|
|
var root = document.currentScript ? document.currentScript.closest('[data-timed-download]') : null;
|
|
|
|
if (!root) {
|
|
return;
|
|
}
|
|
|
|
var token = '{{ token|e('js') }}';
|
|
|
|
if (token) {
|
|
var currentUrl = new URL(window.location.href);
|
|
|
|
if (currentUrl.searchParams.get('tdl') !== token) {
|
|
currentUrl.searchParams.set('tdl', token);
|
|
window.history.replaceState({}, '', currentUrl.toString());
|
|
|
|
var shareLinkElement = root.querySelector('.timed-download__share-link a');
|
|
|
|
if (shareLinkElement) {
|
|
shareLinkElement.href = currentUrl.toString();
|
|
}
|
|
}
|
|
}
|
|
|
|
var fallbackShareLinkElement = root.querySelector('.timed-download__share-link a');
|
|
|
|
if (fallbackShareLinkElement && '#' === fallbackShareLinkElement.getAttribute('href')) {
|
|
fallbackShareLinkElement.href = window.location.href;
|
|
}
|
|
|
|
var element = root.querySelector('.timed-download__countdown[data-expires-at]');
|
|
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
var expiresAt = parseInt(element.getAttribute('data-expires-at'), 10);
|
|
|
|
if (Number.isNaN(expiresAt)) {
|
|
return;
|
|
}
|
|
|
|
function formatCountdown(secondsTotal) {
|
|
var seconds = Math.max(0, secondsTotal);
|
|
var days = Math.floor(seconds / 86400);
|
|
var hours = Math.floor((seconds % 86400) / 3600);
|
|
var minutes = Math.floor((seconds % 3600) / 60);
|
|
var secs = seconds % 60;
|
|
|
|
var hh = String(hours).padStart(2, '0');
|
|
var mm = String(minutes).padStart(2, '0');
|
|
var ss = String(secs).padStart(2, '0');
|
|
|
|
if (days > 0) {
|
|
return days + 'd ' + hh + ':' + mm + ':' + ss;
|
|
}
|
|
|
|
return hh + ':' + mm + ':' + ss;
|
|
}
|
|
|
|
function render() {
|
|
var now = Math.floor(Date.now() / 1000);
|
|
var remaining = expiresAt - now;
|
|
|
|
if (remaining <= 0) {
|
|
element.textContent = 'Der Download-Link ist abgelaufen.';
|
|
return false;
|
|
}
|
|
|
|
element.textContent = 'Verbleibende Zeit: ' + formatCountdown(remaining);
|
|
|
|
return true;
|
|
}
|
|
|
|
if (!render()) {
|
|
return;
|
|
}
|
|
|
|
var timer = window.setInterval(function () {
|
|
if (!render()) {
|
|
window.clearInterval(timer);
|
|
window.location.reload();
|
|
}
|
|
}, 1000);
|
|
})();
|
|
</script>
|
|
{% elseif isExpired %}
|
|
<p class="timed-download__expired">Der Download-Link ist abgelaufen.</p>
|
|
{% else %}
|
|
<p class="timed-download__missing">Kein gueltiger Download-Link vorhanden.</p>
|
|
{% endif %}
|
|
</div>
|