Release 1.6.2
This commit is contained in:
@@ -76,7 +76,8 @@
|
||||
<iframe
|
||||
title="Preview — {{ d.name }}"
|
||||
data-display-id="{{ d.id }}"
|
||||
src="{{ url_for('display.display_player', token=d.token) }}?preview=1"
|
||||
class="js-display-preview"
|
||||
data-preview-src="{{ url_for('display.display_player', token=d.token) }}?preview=1"
|
||||
loading="lazy"
|
||||
referrerpolicy="no-referrer"
|
||||
style="width: 100%; height: 100%; border: 0;"
|
||||
@@ -241,17 +242,23 @@
|
||||
|
||||
function refreshPreviewIframe(displayId) {
|
||||
const iframe = document.querySelector(`iframe[data-display-id="${displayId}"]`);
|
||||
if (!iframe || !iframe.src) return;
|
||||
// Previews are disabled on mobile.
|
||||
if (window.matchMedia && window.matchMedia('(max-width: 768px)').matches) return;
|
||||
if (!iframe) return;
|
||||
try {
|
||||
const u = new URL(iframe.src, window.location.origin);
|
||||
const baseSrc = iframe.dataset.previewSrc || iframe.src;
|
||||
if (!baseSrc) return;
|
||||
const u = new URL(baseSrc, window.location.origin);
|
||||
// Ensure preview flag is present (and bust cache).
|
||||
u.searchParams.set('preview', '1');
|
||||
u.searchParams.set('_ts', String(Date.now()));
|
||||
iframe.src = u.toString();
|
||||
} catch (e) {
|
||||
// Fallback: naive cache buster
|
||||
const sep = iframe.src.includes('?') ? '&' : '?';
|
||||
iframe.src = `${iframe.src}${sep}_ts=${Date.now()}`;
|
||||
const baseSrc = iframe.dataset.previewSrc || iframe.src;
|
||||
if (!baseSrc) return;
|
||||
const sep = baseSrc.includes('?') ? '&' : '?';
|
||||
iframe.src = `${baseSrc}${sep}_ts=${Date.now()}`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,6 +474,31 @@
|
||||
if (plSaveBtn) {
|
||||
plSaveBtn.addEventListener('click', savePlaylists);
|
||||
}
|
||||
|
||||
// Disable dashboard previews on small screens (mobile): don't even set iframe src.
|
||||
function loadDashboardPreviewsIfDesktop() {
|
||||
const isMobile = window.matchMedia && window.matchMedia('(max-width: 768px)').matches;
|
||||
if (isMobile) return;
|
||||
document.querySelectorAll('iframe.js-display-preview[data-preview-src]').forEach((iframe) => {
|
||||
if (!iframe.src || iframe.src === 'about:blank') {
|
||||
iframe.src = iframe.dataset.previewSrc;
|
||||
}
|
||||
});
|
||||
}
|
||||
loadDashboardPreviewsIfDesktop();
|
||||
|
||||
// If user rotates/resizes from mobile -> desktop, load previews then.
|
||||
if (window.matchMedia) {
|
||||
const mql = window.matchMedia('(max-width: 768px)');
|
||||
const onChange = () => {
|
||||
if (!mql.matches) loadDashboardPreviewsIfDesktop();
|
||||
};
|
||||
if (typeof mql.addEventListener === 'function') {
|
||||
mql.addEventListener('change', onChange);
|
||||
} else if (typeof mql.addListener === 'function') {
|
||||
mql.addListener(onChange);
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -203,6 +203,14 @@
|
||||
let tickerInterval = null;
|
||||
let tickerLastHeadlines = [];
|
||||
|
||||
function getTickerPollSeconds() {
|
||||
// Refresh headlines on a long interval.
|
||||
// Default: 12 hours (twice per day).
|
||||
// Override via ?ticker_poll=seconds.
|
||||
const tp = parseInt(new URLSearchParams(window.location.search).get('ticker_poll') || '', 10);
|
||||
return Number.isFinite(tp) && tp > 0 ? tp : (12 * 60 * 60);
|
||||
}
|
||||
|
||||
const ANIM_MS = 420;
|
||||
|
||||
function getTransitionMode(pl) {
|
||||
@@ -391,8 +399,7 @@
|
||||
clearInterval(tickerInterval);
|
||||
tickerInterval = null;
|
||||
}
|
||||
// Refresh every 2 minutes; server caches too.
|
||||
tickerInterval = setInterval(refreshTickerOnce, 120 * 1000);
|
||||
tickerInterval = setInterval(refreshTickerOnce, getTickerPollSeconds() * 1000);
|
||||
}
|
||||
|
||||
function clearStage() {
|
||||
|
||||
Reference in New Issue
Block a user