- Live homepage:

Added default Live settings in 
[includes/db.php](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php) 
using https://stream.place/embed/tyclifford.com.
Added Admin → Settings → Live Section controls in 
[admin/settings.php](/Users/tyemeclifford/Documents/GH/mediaplayer/admin/settings.php): 
enable/disable, live title, and embed URL/iframe input.
Added a homepage Videos / Live toggle in 
[index.php](/Users/tyemeclifford/Documents/GH/mediaplayer/index.php). 
Videos remains the default view, so the homepage behaves normally until 
Live is selected.
Imgur:
Added Imgur URL normalization, embed support, oEmbed/thumbnail hooks, 
and external view count scraping support in 
[includes/db.php](/Users/tyemeclifford/Documents/GH/mediaplayer/includes/db.php).
Supports imgur.com, albums/galleries, and direct i.imgur.com 
photos/GIFs/videos by routing them through Imgur embeds.
Imgur external views now flow into external_view_count, so per-item and 
overall site totals include readable Imgur provider counts.
Updated the add-video hint and README docs.
This commit is contained in:
Ty Clifford
2026-06-25 07:38:19 -04:00
parent 08caf98fa5
commit a3aa51c4e2
5 changed files with 187 additions and 5 deletions
+60 -1
View File
@@ -33,6 +33,9 @@ $public_stats = $show_page_stats ? public_page_stats() : [
'sources' => 0,
'views' => $total_public_views,
];
$live_enabled = live_enabled();
$live_url = $live_enabled ? live_embed_url() : '';
$live_title = live_embed_title();
$per_page = (int)setting('catalogue_per_page', '10');
$page = max(1, (int)($_GET['page'] ?? 1));
@@ -150,6 +153,24 @@ render_head('Media — TyClifford.com', '
display:block; width:100%; height:100%;
border:0; background:#000;
}
.home-mode-toggle {
display:inline-flex; align-items:center; gap:.4rem;
align-self:flex-start;
padding:.25rem; border:1px solid var(--border-2); border-radius:var(--r);
background:rgba(255,255,255,.03);
}
.home-mode-toggle button {
border:0; border-radius:calc(var(--r) - 1px); cursor:pointer;
padding:.38rem .75rem;
font-family:"Share Tech Mono",monospace; font-size:.65rem; letter-spacing:.08em;
color:var(--text-3); background:transparent;
transition:color .2s, background .2s;
}
.home-mode-toggle button:hover { color:var(--text-2); }
.home-mode-toggle button.active { color:var(--green); background:rgba(0,232,122,.12); }
.home-mode-panel[hidden] { display:none; }
.live-footer { justify-content:space-between; }
.live-footer .stream-meta { max-width:60ch; line-height:1.5; letter-spacing:.06em; }
/* ── Lower grid ── */
.lower-grid { display:grid; grid-template-columns:1fr; gap:1rem; }
@@ -252,8 +273,30 @@ render_head('Media — TyClifford.com', '
<?php render_topbar('home'); ?>
<?php if ($live_enabled): ?>
<div class="home-mode-toggle" role="tablist" aria-label="Homepage media mode">
<button type="button" class="active" data-home-mode="videos" role="tab" aria-selected="true" aria-controls="home-video-panel">Videos</button>
<button type="button" data-home-mode="live" role="tab" aria-selected="false" aria-controls="home-live-panel">Live</button>
</div>
<section class="stream-card home-mode-panel" id="home-live-panel" aria-label="Live stream" hidden>
<div class="stream-ratio">
<iframe class="provider-embed-frame"
src="<?= h($live_url) ?>"
allowfullscreen
allow="autoplay; fullscreen"
title="<?= h($live_title) ?>"
referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
<div class="stream-footer live-footer">
<p class="eyebrow eyebrow-green"><?= h($live_title) ?></p>
<p class="stream-meta"><span>live embed</span></p>
</div>
</section>
<?php endif; ?>
<!-- ═══════════════════════════ PLAYER CARD ════════════════════════════════ -->
<section class="stream-card" aria-label="Media player">
<section class="stream-card home-mode-panel" id="home-video-panel" aria-label="Media player">
<div class="stream-ratio">
<?php if ($primary_player_source && ($primary_player_source['kind'] ?? '') === 'iframe'): ?>
<iframe class="provider-embed-frame"
@@ -502,6 +545,22 @@ document.addEventListener('DOMContentLoaded', function() {
toggleBtn.setAttribute('aria-expanded', open ? 'true' : 'false');
});
}
var modeButtons = document.querySelectorAll('[data-home-mode]');
var livePanel = document.getElementById('home-live-panel');
var videoPanel = document.getElementById('home-video-panel');
modeButtons.forEach(function(btn) {
btn.addEventListener('click', function() {
var mode = btn.getAttribute('data-home-mode');
modeButtons.forEach(function(other) {
var active = other === btn;
other.classList.toggle('active', active);
other.setAttribute('aria-selected', active ? 'true' : 'false');
});
if (livePanel) livePanel.hidden = mode !== 'live';
if (videoPanel) videoPanel.hidden = mode === 'live';
});
});
});
// Copy embed code to clipboard