Release
This commit is contained in:
0
contao/templates/.twig-root
Normal file
0
contao/templates/.twig-root
Normal file
118
contao/templates/frontend/timed_download_link.html.twig
Normal file
118
contao/templates/frontend/timed_download_link.html.twig
Normal file
@@ -0,0 +1,118 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user